大家好,我是小吴!欢迎来到从零开始学Python第十期。简单回顾前两期内容,我们分别学习了 while 循环 和 for 循环,掌握了两种循环的基础语法与完整执行流程。
for 循环变量 in 可迭代对象(字符串、列表、元组、range() 对象、集合、字典、文件等): 循环体代码
在 while 循环的学习中,我们重点理解了循环条件的核心作用,学会了合理设计循环条件、利用 break 语句规避死循环。同时优化了之前的温度转换案例,实现了支持多次转换、可手动退出的完整版程序。
在 for 循环的学习中,我们掌握了它的黄金搭档——range() 函数,学会了用 for 循环遍历列表、字符串,了解了独特的 for-else 语法结构,最后完成了「1~100查找所有质数」的复杂案例。
学完两种循环后,可能很多小伙伴都会产生疑惑:
同样都是循环,到底什么时候用 for 循环,什么时候用 while 循环?而且很多场景下,两种循环都能实现效果,我们优先选择哪一个呢?今天这期,我们就针对这两个问题,展开学习。
一、回顾两个循环的底层核心逻辑
for 循环:主打「已知遍历、固定范围」
手上有一组明确的内容、固定的次数,挨个取出元素处理,全部处理完毕后,循环自动结束,无需手动控制终止条件。
while 循环:主打「条件驱动、未知次数」
不清楚具体要循环多少次,只设定终止规则,只要条件成立就持续执行,条件不成立就立刻停止循环。
举个例子:
假如你排队买早餐,前面只有3个人,一人一分钟,你明确知道只需要等3分钟就能轮到自己,这就是 for 循环。次数固定、对象明确,处理完自动结束。
如果前面是超长队伍,不知道具体有多少人、要等多久,只知道没排到自己就继续等,这就是 while 循环。次数未知,完全依靠条件判断是否继续。
二、场景对照:什么情况优先选谁?
✅ 优先使用 for 循环的场景
1. 明确知道循环次数
生活例子:跑步固定跑3圈就结束,次数清晰,直接搭配 range() 使用 for 循环。
2. 遍历列表、字符串等成批数据
生活例子:一筐苹果,挨个取出检查是否有坏果。无需手动计数、手动取值,for 循环会自动遍历所有元素,简洁高效。
✅ 优先使用 while 循环的场景
1. 循环次数未知,仅确定终止条件
生活例子:玩游戏,不选择退出就可以一直游玩,无法提前确定游玩次数。
2. 持续监控/等待条件满足
生活例子:烧水的时候,我们没办法确定要精确等待多少秒。只能持续监控状态:只要水还没沸腾,就继续等;等到水烧开这个条件达成,就立刻结束等待。
3. 需要无限循环框架
用 while True 搭建永久循环外壳,内部自定义终止逻辑,适配绝大多数交互式程序。
while True: # 业务逻辑代码 if 满足退出条件: break
✨两种循环均可实现
部分简单需求,for 循环和 while 循环都能实现,最经典的案例:计算 1~100 的累加和。
两种写法运行结果是一样的,但 while 循环需要我们手动初始化变量、手动更新计数器,写起来相对繁琐。反观 for 循环,代码更加简短,逻辑清晰,出错的概率也更低。因此,只要可以使用 for 循环,就优先选择 for 循环。只有无法提前确定循环次数,需要等待某个条件触发时,才选用 while 循环。
三、选择循环的黄金法则
法则1:按已知信息选择
• 循环次数未知、靠条件终止 → while 循环
• 遍历字符串、列表等成批数据 → for 循环
• 等待特定条件触发、人机交互 → while 循环
法则2:优先保证代码可读性
拒绝冗余代码,能用简洁写法绝不复杂化。
法则3:嵌套循环优先用 for 循环
多层循环嵌套时,for 循环逻辑更清晰,能有效降低代码混乱度,减少bug。
四、实战小案例,巩固知识点
案例1:统计一句话的字符总数
需求:输入一段文字,统计总字符数量。字符串是可迭代对象,优先使用 for 循环。
案例2:密码重复验证登录
需求:用户输入密码,错误则重新输入,正确则登录成功。无法确定输错次数,优先使用 while 循环。
这期我们重点梳理了两大循环的使用边界:
for 循环:适配已知集合、固定次数的遍历场景;
while 循环:适配条件驱动、次数未知的循环场景。
✍️小思考:平时登录,输入密码的时候,我们经常能看到提示,告诉你还剩下几次输入机会。当所有机会用完之后,程序就直接退出。大家可以动手试试:这个功能该怎么实现?
下一期我们学习Python编程中的三大基础结构:顺序结构、选择结构和循环结构。其实这个知识点应该放在前期学习,因为它是所有Python代码的底层骨架!不过先实操、后补原理,更便于大家理解😂
拜拜👋,我们下期见!