查看全课大纲(第 10 / 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.空气质量数据怎么“洗”干净,还能画成图?
汇率兑换程序能一直运行,直到我喊停吗?
约 24 分钟
小象实战讲义 · Python 入门:8 个小项目边玩边学
在上一节,我们让汇率兑换程序学会了“看人下菜碟”——能自动识别你输入的是人民币还是美元,然后进行正确的换算。但每次算完一次,程序就“下班”了,想再算一次就得重新运行,有点麻烦。
今天,我们就来解决这个“麻烦”!我们要给程序加上一个循环功能,让它变成一个不知疲倦的“计算器”。只要你愿意,它可以一直为你服务,直到你主动说“Q”(退出)。想象一下,你的程序现在像一个24小时营业的便利店,随时待命,是不是很酷?
💡 核心导读
- 循环是什么? 让一段代码可以重复执行多次的“魔法”。
while循环:Python 中实现循环的“开关”,条件是它的“遥控器”。- 避免“死循环”:一个不小心,程序就会变成停不下来的“复读机”,我们要学会如何正确控制它。
- 程序友好度升级:给循环加点“装饰”,让交互界面更清晰、更友好。
从流程图到代码:理解“循环”这件事
还记得我们之前写的程序吗?它像一条单行道,从输入到输出,走完就结束。但我们想要的是环形跑道,跑完一圈,还能回到起点,继续下一圈。
这种“环形跑道”在编程里就叫循环。为了理清思路,程序员们喜欢用一种叫流程图的工具来画图。下面就是我们3.0版本程序的“设计图”:
开始
↓
输入带单位的金额(例如:100CNY)
↓
判断用户输入的是否为“Q”?
├─ 如果是“Q” → 输出“程序已退出!” → 结束
↓
└─ 如果不是“Q” → 执行我们2.0版本的所有换算逻辑
↓
(这里是判断CNY/USD、计算、输出的所有步骤)
↓
└─ 回到“判断用户输入的是否为‘Q’?”这一步看到了吗?关键在于那个“回到”的箭头。只要用户输入的不是“Q”,程序就会一遍又一遍地执行中间的换算逻辑。这,就是循环的精髓。
本节新增:认识 while 循环
本节我们只加一件事:用 while 循环让程序能一直运行。
在 Python 里,我们用一个叫做 while 的关键字来创建循环。你可以把它理解成“当……的时候,就重复做某事”。
它的语法长这样:
while 条件:
# 如果条件满足(为 True),就执行这个缩进块里的所有语句
# 执行完后,会再次回到上面检查"条件"
# 如果条件不满足(为 False),就跳出循环,执行后面的代码条件是什么? 它和我们上一节学的 if 语句里的条件一模一样,就是一个判断,结果是 True(真)或 False(假)。
True:代表条件成立,循环继续。False:代表条件不成立,循环停止。
好了,理论说完,我们动手把它塞进我们的汇率兑换程序里!
动手实现:给程序装上“循环引擎”
我们的策略是:在2.0版本的程序外面,套上一个 while 循环。循环的条件就是:当用户输入的不是退出指令“Q”时,就继续换算。
第一步:搭建循环框架
我们先从最核心的循环判断开始。我们会提示用户输入,并且判断这个输入是否等于“Q”。
# 汇率(这个没变)
USD_VS_RMB = 6.77
# 1. 首先,询问用户输入,并提示退出方式
currency_str_value = 'Q' # 固定为退出标志值(循环体内若恒为此值,循环只跑一轮就结束;原程序这里是 input() 让用户决定何时退出)
# 2. 新增的 while 循环:只要输入不是'Q',就执行循环体
while currency_str_value != 'Q':
# 注意这个冒号和缩进!循环体里的所有代码都要缩进
# 这里先留空,我们马上把2.0的代码搬进来
print("循环体里的代码待填充...")
# 3. 一次循环结束后,需要再次询问用户,否则会陷入死循环
currency_str_value = 'Q' # 固定为退出标志值(循环体内若恒为此值,循环只跑一轮就结束;原程序这里是 input() 让用户决定何时退出)
# 4. 循环结束后(即用户输入了'Q'),执行这里的代码
print('程序已退出!')程序已退出!代码解读:
!=是“不等于”的意思。currency_str_value != 'Q'就是判断输入是否不等于“Q”。- 如果输入是“100CNY”,它不等于“Q”,条件为
True,程序进入循环体。 - 循环体最后一行至关重要:它再次让用户输入。这样,下一次循环判断时,
currency_str_value就是用户的新输入了。 - 如果用户输入“Q”,条件
'Q' != 'Q'结果为False,循环结束,直接执行最后的print('程序已退出!')。
第二步:填入核心换算逻辑
现在,我们把2.0版本里那个强大的“判断+计算”引擎,整个搬到 while 循环的缩进块里。
# 汇率
USD_VS_RMB = 6.77
# 带单位的货币输入
currency_str_value = 'Q' # 固定为退出标志值(循环体内若恒为此值,循环只跑一轮就结束;原程序这里是 input() 让用户决定何时退出)
while currency_str_value != 'Q':
# ---------------- 以下是2.0版本的核心逻辑 ----------------
# 获取货币单位
unit = currency_str_value[-3:]
if unit == 'CNY':
# 输入的是人民币
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)
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:
# 其他情况
print('目前版本尚不支持该种货币!')
# ---------------- 以上是2.0版本的核心逻辑 ----------------
print('************************************************')
# 一次循环结束后,再次询问用户,为下一次循环做准备
currency_str_value = 'Q' # 固定为退出标志值(循环体内若恒为此值,循环只跑一轮就结束;原程序这里是 input() 让用户决定何时退出)
print('程序已退出!')程序已退出!大功告成! 这就是我们汇率兑换程序的3.0版本。现在,你可以连续兑换无数次,直到输入“Q”才会退出。
趣味调试:给循环装个“计数器”
有时候,我们想知道循环到底执行了多少次。可以加一个计数器变量 i。
# 汇率
USD_VS_RMB = 6.77
currency_str_value = 'Q' # 固定为退出标志值(循环体内若恒为此值,循环只跑一轮就结束;原程序这里是 input() 让用户决定何时退出)
i = 0 # 初始化计数器
while currency_str_value != 'Q':
i = i + 1 # 每次循环,计数器加1
print('这是第', i, '次计算') # 打印当前是第几次循环(调试用,发布时可注释掉)
# ... (这里省略中间完整的换算逻辑,和上面代码块一样) ...
print('************************************************')
currency_str_value = 'Q' # 固定为退出标志值(循环体内若恒为此值,循环只跑一轮就结束;原程序这里是 input() 让用户决定何时退出)
print('程序已退出!')注意看 i = i + 1 这行:
- 在数学上,
i = i + 1永远不成立。 - 但在编程里,
=是赋值号,意思是“把右边的计算结果,存到左边的变量里”。 - 所以这行的意思是:取出
i当前的值,加上1,再把结果存回i。这样i的值就增加了1。
这个技巧在你以后自己调试复杂程序时非常有用。当然,给用户看的最终版本,可以把 print('这是第', i, '次计算') 这行用 # 注释掉,界面就更清爽了。
警惕!循环的陷阱:死循环
在我们最初的尝试中,如果不小心忘记了在循环体最后让用户重新输入,就会发生可怕的事情:
# ❌ 错误示范(会导致死循环)
while currency_str_value != 'Q':
# ... 执行换算逻辑 ...
# 执行完后,currency_str_value 还是最初输入的那个值,比如“100CNY”
# 然后跳回while判断:“100CNY” != ‘Q’ 吗? 是True!
# 于是又开始执行换算逻辑, currency_str_value 还是“100CNY”...
# 如此反复,永无止境,程序“卡死”了。这就是死循环——程序停不下来,像一台失控的机器。避免死循环的关键是:确保循环体内的操作,有可能使循环条件在未来变为 False。对我们来说,就是在每次循环结束前,给用户一个改变输入(从而可能输入‘Q’)的机会。
📝 动手练一练
体验无限兑换:将本节完整的3.0版本代码(包含计数器
i的版本)运行起来。尝试连续兑换3次不同的金额,然后输入“Q”退出。观察计数器和输出分隔线******是如何让过程更清晰的。改造存钱计算器(假设):假设我们有一个计算每周存钱总额的简单程序(
total = 每周金额 * 周数)。如果想让这个程序能反复计算不同周数下的总额,直到用户输入“结束”,你会怎么用while循环改造它?请写出循环部分的核心框架。- 提示:思考循环条件是什么?循环体内需要做什么?循环结束后提示什么?
👉 点击查看第2题参考答案
思路:
- 循环条件:当用户输入的不是“结束”时,继续计算。
- 循环体内:询问用户“每周存多少钱”和“存多少周”,然后计算并输出总额。
- 循环结束后:输出“存钱计算结束”。
核心代码框架:
# 初始化用户输入(或者直接用第一次输入)
user_command = '结束' # 固定为退出标志值(循环体内若恒为此值,循环只跑一轮就结束;原程序这里是 input() 让用户决定何时退出)
while user_command != '结束':
# 1. 获取每周存钱金额(这里简化,假设user_command就是金额)
# 实际可能需要更复杂的输入处理
money_per_week = float(user_command)
# 2. 获取周数
weeks = 10 # 原程序用 input() 让用户输入数字,这里用固定值代替(参与乘法运算,故不加引号),你可以改成自己的值试
# 3. 计算并输出
total = money_per_week * weeks
print(f'每周存{money_per_week}元,共存{weeks}周,总额为:{total}元')
print('---')
# 4. 为下一次循环做准备,再次询问
user_command = '结束' # 固定为退出标志值(循环体内若恒为此值,循环只跑一轮就结束;原程序这里是 input() 让用户决定何时退出)
print('存钱计算结束!')存钱计算结束!本章小结
恭喜!你的汇率兑换程序获得了“永动机”属性(当然是受控的)!现在它已经是一个相当实用的小工具了。
我们本节只引入了一个新概念——while 循环,但它的力量是巨大的。它让程序从“一次性”变成了“可持续交互”。你还学会了:
- 用
while 条件:来构建循环。 - 用
!=判断“不等于”。 - 如何避免致命的“死循环”(关键是在循环体内改变循环条件)。
- 用计数器变量来辅助调试。
📋 行动清单
- 运行完整的3.0程序,享受连续兑换的畅快感。
- 尝试故意去掉循环体最后一句
input,感受一下“死循环”的恐怖,然后记得按IDE的停止按钮。 - 想一想,你手机里有哪些App的功能,感觉像是用“循环”逻辑实现的?(比如,音乐播放器的“单曲循环”)
—— 小象教研组
配套资料 · 直接下载
课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。
- 下载第2章代码包:汇率兑换(含全部版本 5 个 .py)ZIP · 3KB