查看全课大纲(第 9 / 51 节)
  1. 1.为什么人人都该学点编程?
  2. 2.计算机与程序设计:你的电脑到底在“想”什么?
  3. 3.Python 这门语言,到底有什么魔力?
  4. 4.Python 开发环境配置:如何拥有你的第一个“编程工具箱”?
  5. 5.如何安装一个更强大的代码编辑器?
  6. 6.汇率兑换1.0:你的第一个“钱生钱”小程序
  7. 7.你的第一行代码,藏着哪些秘密?
  8. 8.汇率兑换2.0(上):让程序看懂“CNY”和“USD”
  9. 9.汇率兑换程序,如何让它“聪明”地判断币种?
  10. 10.汇率兑换程序能一直运行,直到我喊停吗?
  11. 11.汇率兑换4.0:如何把“算钱”功能打包成积木?
  12. 12.汇率兑换5.0:给你的程序穿上“结构化”的西装
  13. 13.怎么用 Python 画一个会动的五角星?
  14. 14.如何让程序自动画出不同大小的五角星?
  15. 15.函数自己调用自己,会发生什么?
  16. 16.用递归画出神奇的分形树
  17. 17.Python 怎么计算你一天躺着不动能消耗多少热量?
  18. 18.如何让程序“活”起来,持续为你服务?
  19. 19.如何让 BMR 计算器更“聪明”?
  20. 20.当程序遇到“不按套路出牌”的用户怎么办?
  21. 21.怎么用 Python 模拟一个“滚雪球”式的存钱计划?
  22. 22.如何用列表记录每一周的存款?
  23. 23.如何让程序自己数数?—— 用 for 循环解放你的双手
  24. 24.52周存钱挑战4.0:你的存款计算器能有多灵活?
  25. 25.52周存钱挑战:怎么根据日期自动查存款?
  26. 26.Python 怎么判断一年中的第几天?
  27. 27.列表 vs 元组:哪个更适合存储月份天数?
  28. 28.用集合给月份分个队,换个思路算天数
  29. 29.把月份和天数“锁”在一起:用字典给数据配个对
  30. 30.Python 怎么判断密码强弱?
  31. 31.Python 怎么给密码设置“防沉迷”系统?
  32. 32.Python 怎么把密码保存到文件里?
  33. 33.Python 怎么读取文件里的密码?
  34. 34.Python 怎么把密码检查工具“打包”起来?
  35. 35.Python 怎么把文件操作也“打包”起来?
  36. 36.计算机怎么“扔骰子”?——用Python模拟随机事件
  37. 37.如何用 Python 模拟掷两个骰子?
  38. 38.怎么用 Python 把骰子轨迹画出来?
  39. 39.骰子点数分布长啥样?用直方图一眼看穿!
  40. 40.用科学计算库让骰子程序“起飞”
  41. 41.空气质量指数怎么算?手把手教你写一个AQI计算器
  42. 42.空气质量指数计算:从零开始,让程序看懂空气
  43. 43.如何读取空气质量数据文件并找出空气质量最好的五个监测点?
  44. 44.JSON 数据怎么变成 Excel 表格?—— 让数据换个“马甲”
  45. 45.Python 怎么让程序自己判断文件类型?
  46. 46.如何让程序自己上网查空气质量?
  47. 47.用美味的汤来解析网页:Beautiful Soup 入门
  48. 48.如何让爬虫自动抓取全国所有城市的空气质量?
  49. 49.爬到的数据怎么存下来?—— 把全国空气质量数据保存为CSV文件
  50. 50.用 pandas 玩转空气质量数据:找出全国空气最好和最差的城市
  51. 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',你会看到输出结果。这里有几个至关重要的新知识点:

  1. == 是“判断相等”,不是 =:= 是赋值(把右边的值给左边),而 == 是比较左右两边是否相等,它会得到一个 True(真)或 False(假)的结果。if unit == 'CNY': 就是在问:“unit 等于 'CNY' 吗?”
  2. 冒号 : 和缩进: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里跟着做):

  1. 在你感兴趣的行号旁边单击,设置一个断点(红色圆点)。比如点在 if unit == 'CNY': 这一行。
  2. 点击“Debug”按钮(通常是个小虫子图标)运行程序。
  3. 程序会停在断点处,高亮显示即将执行但还未执行的这行代码。
  4. 点击“Step Over”(单步执行)按钮,程序会执行当前高亮的行,并跳到下一行。
  5. 观察“Variables”(变量)窗口,你可以看到 unit 等变量的当前值。
  6. 关键观察:当 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() 进行转换是安全得多的做法。我们的课程后续都会使用安全写法。

📝 动手练一练

  1. “挑剔”的兑换器:现在的程序只认识大写字母的“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':
    # ...
  1. 汇率扩展:我们的程序目前只支持人民币和美元。请你为它增加对欧元(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
    下载
看图文没弄懂?展开看本节视频讲解(约 22 分钟)
📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)