查看全课大纲(第 9 / 51 节)
- 1.为什么人人都该学点编程?
- 2.计算机与程序设计:你的电脑到底在“想”什么?
- 3.Python 这门语言,到底有什么魔力?
- 4.Python 开发环境配置:如何拥有你的第一个“编程工具箱”?
- 5.如何安装一个更强大的代码编辑器?
- 6.汇率兑换1.0:你的第一个“钱生钱”小程序
- 7.你的第一行代码,藏着哪些秘密?
- 8.汇率兑换2.0(上):让程序看懂“CNY”和“USD”
- 9.汇率兑换程序,如何让它“聪明”地判断币种?
- 10.汇率兑换程序能一直运行,直到我喊停吗?
- 11.汇率兑换4.0:如何把“算钱”功能打包成积木?
- 12.汇率兑换5.0:给你的程序穿上“结构化”的西装
- 13.怎么用 Python 画一个会动的五角星?
- 14.如何让程序自动画出不同大小的五角星?
- 15.函数自己调用自己,会发生什么?
- 16.用递归画出神奇的分形树
- 17.Python 怎么计算你一天躺着不动能消耗多少热量?
- 18.如何让程序“活”起来,持续为你服务?
- 19.如何让 BMR 计算器更“聪明”?
- 20.当程序遇到“不按套路出牌”的用户怎么办?
- 21.怎么用 Python 模拟一个“滚雪球”式的存钱计划?
- 22.如何用列表记录每一周的存款?
- 23.如何让程序自己数数?—— 用 for 循环解放你的双手
- 24.52周存钱挑战4.0:你的存款计算器能有多灵活?
- 25.52周存钱挑战:怎么根据日期自动查存款?
- 26.Python 怎么判断一年中的第几天?
- 27.列表 vs 元组:哪个更适合存储月份天数?
- 28.用集合给月份分个队,换个思路算天数
- 29.把月份和天数“锁”在一起:用字典给数据配个对
- 30.Python 怎么判断密码强弱?
- 31.Python 怎么给密码设置“防沉迷”系统?
- 32.Python 怎么把密码保存到文件里?
- 33.Python 怎么读取文件里的密码?
- 34.Python 怎么把密码检查工具“打包”起来?
- 35.Python 怎么把文件操作也“打包”起来?
- 36.计算机怎么“扔骰子”?——用Python模拟随机事件
- 37.如何用 Python 模拟掷两个骰子?
- 38.怎么用 Python 把骰子轨迹画出来?
- 39.骰子点数分布长啥样?用直方图一眼看穿!
- 40.用科学计算库让骰子程序“起飞”
- 41.空气质量指数怎么算?手把手教你写一个AQI计算器
- 42.空气质量指数计算:从零开始,让程序看懂空气
- 43.如何读取空气质量数据文件并找出空气质量最好的五个监测点?
- 44.JSON 数据怎么变成 Excel 表格?—— 让数据换个“马甲”
- 45.Python 怎么让程序自己判断文件类型?
- 46.如何让程序自己上网查空气质量?
- 47.用美味的汤来解析网页:Beautiful Soup 入门
- 48.如何让爬虫自动抓取全国所有城市的空气质量?
- 49.爬到的数据怎么存下来?—— 把全国空气质量数据保存为CSV文件
- 50.用 pandas 玩转空气质量数据:找出全国空气最好和最差的城市
- 51.空气质量数据怎么“洗”干净,还能画成图?
汇率兑换程序,如何让它“聪明”地判断币种?
约 22 分钟
小象实战讲义 · Python 入门:8 个小项目边玩边学
上一节,我们学会了如何从用户输入的“100CNY”或“50USD”中,精准地提取出“CNY”或“USD”这个货币单位。这就像给程序装上了一双“眼睛”,让它能看懂我们写的是什么钱。但光看懂还不够,它得“动脑子”判断:如果是人民币,就除以汇率换成美元;如果是美元,就乘以汇率换成人民币。这节课,我们就来给程序装上这个“大脑”——条件判断。学完这一节,你的汇率兑换程序将真正“活”起来,能自动识别币种并完成双向兑换!
💡 核心导读
- 本节新增:
if、elif、else条件判断语句,让程序学会“做选择”。 - 你将学到:如何用
==判断两个值是否相等,以及=和==的重大区别。 - 趣味点:体验程序调试(Debug),像侦探一样一步步追踪程序执行过程,看看它到底是怎么“想”的。
- 最终成果:一个能自动识别人民币或美元,并完成正确换算的“聪明”兑换器。
分支路口:程序如何“做选择”?
想象一下,你站在一个岔路口,路牌写着:左边去北京(CNY),右边去纽约(USD)。你要根据目的地选择不同的路。程序也一样,它需要根据我们输入的货币单位(是 CNY 还是 USD?),选择执行不同的计算路径。这种“根据条件选择不同路径”的结构,在编程里就叫 分支。
在 Python 中,我们用三个关键词来构建分支:if(如果)、elif(否则如果)、else(否则)。它们的逻辑非常像我们平时说话:
- 如果 (
if) 是人民币,就执行人民币换美元的操作。 - 否则如果 (
elif) 是美元,就执行美元换人民币的操作。 - 否则 (
else)(既不是人民币也不是美元),就告诉用户“暂不支持”。
听起来是不是很简单?让我们把它变成代码。
动手搭建第一个分支
我们接着上一节的代码继续。我们已经拿到了货币单位 unit,现在要判断它是什么。
# 汇率 (固定值,方便演示)
USD_VS_RMB = 6.77
# 假设用户输入了"100CNY",我们先用一个固定值代替input()
currency_str_value = '100CNY' # 你可以改成'50USD'试试
# 获取货币单位(字符串最后3个字符)
unit = currency_str_value[-3:]
# 开始判断:如果是人民币(CNY)
if unit == 'CNY':
# 注意这里的冒号(:)和缩进!
# 获取人民币金额部分(去掉最后3个字符)
rmb_str_value = currency_str_value[:-3]
# 将字符串转换为数字(⚠️安全做法:用float,后面会讲为什么不用eval)
rmb_value = float(rmb_str_value)
# 汇率计算:人民币换美元是除以汇率
usd_value = rmb_value / USD_VS_RMB
# 输出结果
print('美元(USD)金额是:', usd_value)
# 我们先把框架搭完,美元的情况待会再写美元(USD)金额是: 14.771048744460858运行上面的代码,如果 currency_str_value 是 '100CNY',你会看到输出结果。这里有几个至关重要的新知识点:
==是“判断相等”,不是=:=是赋值(把右边的值给左边),而==是比较左右两边是否相等,它会得到一个True(真)或False(假)的结果。if unit == 'CNY':就是在问:“unit等于'CNY'吗?”- 冒号
:和缩进:if语句后面必须跟一个冒号。紧接着下一行开始,所有属于这个if条件成立时要执行的代码,必须统一向右缩进 4 个空格(这是 PEP 8 规范;在 PyCharm 里按一次Tab通常会自动变成 4 个空格)。Python 就是靠缩进来识别代码块的归属,而且同一层级的缩进必须一致(不要空格和 Tab 混用)。没有正确缩进,程序会报错或逻辑混乱。
完善分支:加上美元和其他情况
现在,我们来补充美元的情况和其他意外情况。
# 汇率
USD_VS_RMB = 6.77
# 假设用户输入了"50USD"
currency_str_value = '50USD' # 试试改成'100CNY'或'30AUD'
# 获取货币单位
unit = currency_str_value[-3:]
# 判断分支开始
if unit == 'CNY':
# 人民币转美元
rmb_str_value = currency_str_value[:-3]
rmb_value = float(rmb_str_value)
usd_value = rmb_value / USD_VS_RMB
print('美元(USD)金额是:', usd_value)
elif unit == 'USD':
# 美元转人民币
usd_str_value = currency_str_value[:-3]
usd_value = float(usd_str_value)
rmb_value = usd_value * USD_VS_RMB
print('人民币(CNY)金额是:', rmb_value)
else:
# 既不是CNY也不是USD
print('该程序目前版本尚不支持该种货币!')看,一个完整的、带“大脑”的判断程序就写好了!elif 是 else if 的缩写,意思是“如果上面的条件不满足,那就再看看这个条件满不满足”。else 则是“上面所有条件都不满足时”的保底选项。
运行一下,分别把 currency_str_value 改成 '100CNY'、'50USD' 和 '30AUD'(澳元),看看程序会怎么回应你。是不是感觉它变“聪明”了?
🔍 侦探时间:用调试(Debug)看看程序怎么“走”
你可能会好奇:程序真的是按我们想的,只走其中一条路吗?如果输入“AUD”,它真的会跳过前两个判断,直接执行 else 吗?
我们可以用 PyCharm(或其他 IDE)的 调试(Debug) 功能来当一回“程序侦探”。调试就像给程序执行按下了“慢动作播放键”,可以让我们一步一步地看程序到底在执行哪一行代码。
简单演示下流程(你可以在自己的IDE里跟着做):
- 在你感兴趣的行号旁边单击,设置一个断点(红色圆点)。比如点在
if unit == 'CNY':这一行。 - 点击“Debug”按钮(通常是个小虫子图标)运行程序。
- 程序会停在断点处,高亮显示即将执行但还未执行的这行代码。
- 点击“Step Over”(单步执行)按钮,程序会执行当前高亮的行,并跳到下一行。
- 观察“Variables”(变量)窗口,你可以看到
unit等变量的当前值。 - 关键观察:当
unit是'AUD'时,你会发现程序执行到if unit == 'CNY':时,因为条件为False,它直接跳过了整个缩进块,来到了elif行。同样,elif条件也不满足,于是它最终执行了else下面的print语句。
这个过程清晰地展示了:程序在多个分支中,只会选择第一个满足条件的那条路走,并且走完就结束判断,不会再去检查后面的条件。 就像你选择了去北京的路,就不会再走到纽约的路上去。
⚠️ 安全第一:为什么不用 eval()?
细心的你可能发现了,我们在代码中把字符串转数字用的是 float(),而课件原始代码用的是 eval()。这里有一个非常重要的安全知识点:
eval() 函数会把它里面的字符串当作Python代码来执行。这非常危险!如果用户输入的不是 "100CNY",而是 "__import__('os').system('rm -rf /')" 这样的恶意字符串(当然这里做了简化),eval() 就会真的去执行删除文件的命令!
# ❌ 危险写法(原课件示例,请勿在实际项目中使用):
rmb_value = eval(rmb_str_value) # 如果rmb_str_value是恶意代码,就会被执行!
# ✅ 安全写法(本讲义采用):
rmb_value = float(rmb_str_value) # 只尝试转换成浮点数,安全可控。所以,记住这个原则:对于用户输入的内容,绝对不要直接使用 eval()。 用 int() 或 float() 进行转换是安全得多的做法。我们的课程后续都会使用安全写法。
📝 动手练一练
- “挑剔”的兑换器:现在的程序只认识大写字母的“CNY”和“USD”。如果用户输入了“100cny”或“50usd”(小写),程序就会报错或走到
else分支。请你修改程序,让它能同时识别大写和小写的货币单位。(提示:字符串有一个.upper()方法可以把所有字母变大写)。
👉 点击查看参考答案
思路:在判断之前,先将获取到的 unit 统一转换成大写,这样无论用户输入的是“CNY”、“cny”还是“Cny”,我们判断时都变成了与“CNY”比较。
关键修改代码片段:
# 获取货币单位
unit = currency_str_value[-3:]
# 新增一行:将单位转换为大写
unit = unit.upper()
# 后续的if判断保持不变,因为unit已经是大写的了
if unit == 'CNY':
# ...
elif unit == 'USD':
# ...- 汇率扩展:我们的程序目前只支持人民币和美元。请你为它增加对欧元(EUR) 的支持。假设1欧元 = 7.8人民币。用户输入“20EUR”时,程序应能换算成人民币并输出。
👉 点击查看参考答案
思路:在 elif 后面再添加一个 elif 分支,判断单位是否为 'EUR',然后进行相应的计算(欧元乘以汇率得到人民币)。
关键修改代码片段:
# 定义欧元汇率
EUR_VS_RMB = 7.8
# 在原有的判断结构中增加一个分支
elif unit == 'EUR':
# 欧元转人民币
eur_str_value = currency_str_value[:-3]
eur_value = float(eur_str_value)
rmb_value = eur_value * EUR_VS_RMB
print('人民币(CNY)金额是:', rmb_value)
# 原有的else分支保持不变本章小结
恭喜!你已经成功为汇率兑换程序装上了“条件判断”的大脑,它现在是一个能识别币种、双向兑换的智能小工具了。
📋 行动清单
- 运行并测试你的2.0版程序,分别用“100CNY”、“50USD”、“30AUD”和“20eur”(如果完成了挑战1)来考验它。
- 体验调试:在你的IDE中,对不同的输入设置断点,使用调试模式一步步走一遍,亲眼看看程序是如何在不同分支间跳转的。
- 完成挑战:尝试解决“动手练一练”中的问题,让你的程序变得更强大、更友好。
我们已经解决了“判断”的问题,但你是否觉得每次计算都要重新运行一次程序很麻烦?下一节,我们将让程序“不知疲倦”地工作——循环,直到你让它休息为止。
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第2章代码包:汇率兑换(含全部版本 5 个 .py)ZIP · 3KB