上一期我们掌握了for循环的“遍历与批量处理”逻辑,今天继续解锁Python流程控制的另一大核心——while循环。它和for循环一样,核心作用是“重复执行一段代码”,但适用场景完全不同:for循环适合“已知循环次数”的场景,而while循环适合“未知循环次数、满足条件就继续”的场景,两者互补,覆盖所有循环需求。
生活中也有很多while循环的场景:“只要没吃饱,就继续吃饭”“只要闹钟没响,就继续睡觉”“只要任务没完成,就继续执行”——这种“条件满足就重复、不满足就停止”的逻辑,正是while循环的核心。今天从基础语法、核心区别、实战示例到避坑指南,一次性讲透while循环,看完直接套用。
📌 先搞懂:while循环的核心作用
while循环的核心是“条件判断式重复”,本质是:先判断一个条件是否成立,如果成立,就执行循环体中的代码;执行完毕后,再次判断条件,直到条件不成立,循环自动终止。
和for循环的“已知次数、逐个遍历”不同,while循环不需要提前知道循环要执行多少次,只要条件满足,就会一直重复。比如:让程序一直运行,直到用户输入“退出”;计算一个数的阶乘,直到乘数减到1;不断接收用户输入,直到输入正确——这些场景用while循环更简洁高效。
简单总结:for循环是“按次数循环”,while循环是“按条件循环”,根据场景选择,就能最大化简化代码。
🔧 基础语法:while循环的核心结构
while循环的语法比for循环更简洁,核心只有“条件判断”和“循环体”两部分,同样要严格遵守Python的“缩进规则”(和if、for循环一致,不可出错)。
核心规则:while后面接“条件表达式”,末尾必须加冒号(:);缩进(通常4个空格)代表“属于循环体的代码”,会被重复执行;每次循环结束后,都会重新判断条件,条件不成立则终止循环。
1. 基本语法格式
while 条件表达式: 循环体(需要重复执行的代码,缩进4个空格) 循环体(同一缩进级别,依次执行)# 不缩进的代码,循环结束后才执行,只执行一次
关键说明:
条件表达式:返回布尔值(True/False)的语句,比如“num < 10”“flag == True”,条件为True时执行循环体,为False时终止循环;
循环体:需要重复执行的代码,缩进必须规范,否则会报错或逻辑混乱;
循环终止:必须保证“条件表达式最终会变为False”,否则会陷入“无限循环”(程序一直运行,无法停止)。
2. 最基础示例:打印1-5的数字
用while循环实现“打印1到5”,无需提前知道循环次数,只要满足“数字小于等于5”,就继续打印,直到数字大于5,循环终止。
# 打印1-5的数字num = 1 # 初始化一个变量,作为循环的起始条件while num <= 5: # 条件:num小于等于5,成立则执行循环体 print(num) # 循环体:打印当前num的值 num += 1 # 关键:更新num的值(每次加1),避免无限循环# 不缩进的代码,循环结束后执行print("循环执行完毕!")
执行结果:依次打印1、2、3、4、5,最后打印“循环执行完毕!”。
重点提醒:这里的“num += 1”是核心,用于更新条件中的变量,让条件最终会变为False(当num=6时,num <=5不成立),否则循环会一直执行,陷入无限循环。
🔨 核心用法:3种高频场景
while循环的核心优势是“未知循环次数”,下面3种场景是实战中最常用的,掌握它们,就能应对80%的while循环需求,同时避开无限循环的坑。
1. 场景1:未知次数的重复执行
适合“不知道要执行多少次,只知道停止条件”的场景,比如:让用户反复输入密码,直到输入正确为止。
# 示例:用户输入密码,直到输入正确correct_password = "123456" # 正确密码password = input("请输入密码:") # 初始化,获取用户第一次输入# 条件:输入的密码不等于正确密码,就继续循环while password != correct_password: print("密码错误,请重新输入!") password = input("请输入密码:") # 重新获取用户输入,更新条件print("密码正确,登录成功!") # 循环终止后执行
执行逻辑:用户第一次输入密码,如果错误,就重复提示“重新输入”,直到输入正确的密码,循环终止,打印登录成功。这里的循环次数是未知的,取决于用户输入的次数。
2. 场景2:计算累加/累乘(数值运算)
适合需要反复进行数值运算,直到满足条件的场景,比如:计算1到10的累加和、计算5的阶乘(5! = 5×4×3×2×1)。
# 示例1:计算1-10的累加和total = 0 # 用于存储累加和num = 1 # 起始数字while num <= 10: total += num # 每次循环,将当前num加到total中 num += 1 # 更新num,避免无限循环print(f"1-10的累加和为:{total}")# 示例2:计算5的阶乘(5! = 5×4×3×2×1)factorial = 1 # 用于存储阶乘结果(初始值为1,乘法不影响结果)num = 5 # 起始数字while num >= 1: factorial *= num # 每次循环,将当前num乘到factorial中 num -= 1 # 更新num,从5减到1print(f"5的阶乘为:{factorial}")
3. 场景3:无限循环(可控终止)
有时候需要让程序“一直运行”,直到用户主动触发终止条件(比如输入“退出”),这时候就需要用“无限循环+break语句”实现(break语句后续会详细讲,这里先掌握基础用法)。
# 示例:无限循环,直到用户输入“退出”while True: # 条件为True,循环会一直执行(无限循环) user_input = input("请输入指令(输入'退出'终止程序):") if user_input == "退出": break # 触发终止条件,跳出循环 print(f"你输入的指令是:{user_input}")print("程序已终止!")
执行逻辑:循环会一直运行,接收用户输入的指令,直到用户输入“退出”,执行break语句,跳出循环,程序终止。这种方式适合制作简单的交互程序。
✅ 核心细节:必记的4个关键点
缩进依然是灵魂:和if、for循环一样,while循环的循环体必须缩进(4个空格),同一循环体的缩进必须一致,否则会报错或逻辑错误。
必须有“更新条件”:循环体中一定要有“更新条件表达式中变量”的代码(如num += 1、num -= 1),否则条件会一直为True,陷入无限循环。
条件表达式返回布尔值:while后面的条件必须能返回True或False,不能直接写数字、字符串(如while 5: 虽然不会报错,但会一直循环,不推荐)。
循环终止的两种方式:要么让条件表达式变为False,要么用break语句主动跳出循环(后续详解)。
# 错误示例1:没有更新条件,陷入无限循环# num = 1# while num <= 5:# print(num) # 没有num += 1,num一直是1,条件一直成立,无限循环# 正确示例:有更新条件num = 1while num <= 5: print(num) num += 1# 错误示例2:条件表达式不返回布尔值(不推荐)# while 1: # 数字1会被当作True,陷入无限循环# print("无限循环")
🔍 关键区别:while循环 vs for循环(必分清)
很多人会混淆while和for循环,其实两者的核心区别的就是“循环次数是否已知”,用一张表格就能快速分清,实战中按需选择即可。
对比维度 | while循环 | for循环 |
|---|
核心逻辑 | 按条件循环,条件成立就执行 | 按次数循环,遍历可迭代对象 |
循环次数 | 未知,取决于条件何时不成立 | 已知,取决于可迭代对象的元素个数 |
适用场景 | 未知次数、条件触发终止(如密码验证) | 已知次数、批量遍历(如列表、字符串) |
是否需要更新条件 | 需要,否则易陷入无限循环 | 不需要,自动遍历,自动终止 |
❌ 高频避坑指南
避坑1:忘记更新条件—— 循环体中没有更新条件变量的代码,导致无限循环(最常见错误,程序一直运行,只能强制关闭)。
避坑2:缩进混乱—— 循环体缩进不一致,或忘记缩进,导致代码报错,或逻辑不符合预期。
避坑3:条件表达式写错—— 比如把“num <= 10”写成“num >= 10”,导致循环一次都不执行(条件一开始就不成立)。
避坑4:误用无限循环—— 写while True时,忘记加break语句,导致程序无法终止,陷入无限循环。
# 避坑示例# 坑1:忘记更新条件(无限循环)# num = 1# while num <= 3:# print(num) # 没有num += 1,无限循环# 正确写法num = 1while num <= 3: print(num) num += 1# 坑2:缩进混乱# while num <= 3:# print(num)# num += 1 # 缩进不一致,报错# 坑3:条件表达式写错# num = 1# while num >= 3: # 条件一开始就不成立,循环不执行# print(num)# num += 1# 坑4:无限循环无break# while True:# print("无限循环") # 没有break,无法终止# 正确写法while True: user_input = input("输入'退出'终止:") if user_input == "退出": break print(user_input)
📝 核心总结
while循环的核心是“按条件循环”,条件成立则重复执行,不成立则终止,适合未知循环次数的场景;
核心结构:while 条件表达式: + 缩进的循环体,必须有“更新条件”,避免无限循环;
和for循环的区别:while按条件、次数未知;for按次数、遍历可迭代对象,按需选择;
重点避坑:记住更新条件、规范缩进、避免无限循环,多练习就能熟练掌握。
while循环的难度略高于for循环,核心难点在于“控制循环终止”,避免无限循环。刚开始练习时,建议先写简单的示例(如打印数字、累加),熟悉条件更新的逻辑,再尝试复杂场景(如密码验证、无限循环)。
不用精通手写代码,但一定要看懂循环逻辑;AI能帮你生成循环代码,却不能帮你避开无限循环的坑,读懂每一步条件判断,才能真正掌控代码。