当前位置:首页>python>Python While循环:条件不满足就不停手

Python While循环:条件不满足就不停手

  • 2026-10-11 05:25:41
Python While循环:条件不满足就不停手

很多初学者学完if判断,以为"条件"这件事就搞定了。结果一碰到"重复执行"就懵——for循环会用了,但碰到"不确定要循环多少次"的场景,还是抓瞎。比如:让用户输入密码,输对为止;监听传感器数据,超标就报警;猜数字游戏,猜对才停……

这些场景的共同特点是:不知道要循环几次,但知道什么时候该停。这就是while循环的主场。

一、while循环的核心逻辑:一句话讲透

while = "只要……就继续"

执行逻辑极其直白:

  1. 判断条件 → True → 执行循环体
  2. 执行完循环体 → 回到第1步,再判断条件
  3. 条件变False → 跳出循环,执行后面的代码

和for循环的关键区别:

对比项
for循环
while循环
循环次数
遍历已知序列,次数确定
条件控制,次数不确定
适用场景
"把列表里每个元素处理一遍"
"一直等到用户输对密码"
终止条件
序列遍历完自动停
条件变False才停
死循环风险
低(序列有限就不会死)
高
(条件永远True就完蛋)

一句话记忆: for是"数着次数干活",while是"盯着条件干活"。

二、最基础写法:计数器控制循环

最经典的场景——打印1到5:

输出:

三步缺一不可:

步骤
作用
漏掉的后果
① 初始化
给计数器一个起点
NameError:变量未定义
② 判断条件
决定循环什么时候停
条件直接报错或永远True
③ 更新计数器
让条件最终能变False
死循环!

⚠️ 第③步是新手翻车第一大户。 忘了写count += 1,count永远是1,条件永远为True,程序就卡死在那里了。

三、while循环的执行流程(拆解每一步)

拿上面的代码,逐轮拆解:

关键认知: 条件判断发生在每一轮循环的最开头,不是最末尾。也就是说,while是"先判断后执行",不是"先执行再判断"。

Python没有do-while语法。如果想"先执行一次再判断",用while True + break模拟(后面会讲)。

四、break:紧急刹车

break的作用:不管条件还是不是True,直接终止整个循环。

break的类比: 在排队等窗口办事(while循环),突然接到电话说事情取消了——直接走人(break),不管前面还有多少人。

注意事项:break只跳出最内层循环,嵌套循环里外层不受影响break后面的代码不会执行(同一次迭代内)

五、continue:跳过这次,下次继续

continue的作用:跳过本次循环剩余的代码,直接进入下一轮判断。

continue的类比: 流水线上检查产品,遇到不合格的直接扔掉跳过(continue),但流水线不停,继续处理下一个。

break vs continue 对比:

对比项
break
continue
作用范围
终止整个循环
只跳过当前这一轮
循环后续
不再执行
继续下一轮
类比
下班走人
这个Bug跳过,处理下一个
对else的影响
else不执行else照常执行

⚠️ 最后一行很重要——continue不影响else块,break会阻止else块执行。

六、while...else:Python独有的"彩蛋"

这是Python的特色语法,其他语言(C/Java/JS)都没有。

else的执行条件只有一个:循环是因为条件变False而自然结束的。 如果被break打断,else不执行。

实战案例:密码验证(最多3次)

场景对比:

情况
走哪条路
第1次就输对
break → else不执行
第2次输对
break → else不执行
第3次输对
break → else不执行
3次都没输对
条件变False → else执行

一句话理解: else = "循环善后处理",正常走完才触发,中途跑了就不管了。

💡 不用while...else的话,你得额外写一个found标志变量,代码又丑又长。这就是Pythonic的写法。

七、实战案例:猜数字游戏

把while、break、continue、计数器全串起来:

这段代码覆盖了while的核心考点:

  • ✅ 条件控制循环次数
  • ✅ continue跳过非法输入
  • ✅ break在猜对时立即退出
  • ✅ else处理"机会用完没猜对"的情况
  • ✅ 异常处理(try-except)保证程序不崩溃

八、死循环:新手第一大坑

8.1 怎么产生的?

8.2 怎么避免?三板斧

方法
说明
代码示例
计数器必更新
循环体最后一行更新条件变量
count += 1
while True必配break
无限循环必须有出口
if 条件: break
调试时加计数器上限
开发阶段限制最大循环次数
if count > 1000: break

8.3 死循环了怎么办?

  • 终端/控制台按 Ctrl + C 强制中断
  • IDE里点"停止"按钮
  • 远程服务器用 kill -9 PID

九、while vs for:到底用哪个?

场景
推荐
原因
遍历列表/字典/字符串
for
语法简洁,不怕越界
已知循环次数
for
range(n)
一步到位
等待用户输入
while
不知道用户什么时候输对
监听传感器/状态变化
while
条件满足才停
读取文件直到末尾
while
配合line = f.readline()
需要"没找到"的善后处理
while...else
else块天然支持

选型口诀: 遍历已知用for,条件未知用while,不确定次数等信号,while True加break。

十、进阶技巧

10.1 活动标志(Flag)控制多条件退出

适合多个退出条件共用一个标志变量的场景。

10.2 while处理列表:逐项移动

10.3 while删除列表中的特定元素

⚠️ 注意:不要在for循环里删除列表元素(会导致跳过),用while更安全。

十一、避坑清单(10条)

  1. 忘了更新计数器
     → 死循环,程序卡死。循环体里一定要有改变条件变量的语句
  2. while True没配break
     → 同上。无限循环必须有至少一个出口
  3. break以为能跳出所有循环
     → 只跳最内层。多层嵌套想全跳,用return或标志变量
  4. continue以为能终止循环
     → 只跳过当前这一轮,循环还在继续
  5. 以为else是"条件不满足时执行"
     → 错!else是"循环没被break打断时执行"
  6. for循环里删除列表元素
     → 索引错位导致跳过。删除列表元素用while
  7. 嵌套循环里内层改了外层变量
     → 外层循环次数异常,逻辑全乱
  8. 条件写count < len(list)但list在变
     → 动态长度用while list:更稳
  9. 浮点数做循环条件
     → 精度问题导致多循环或少循环一次,用整数或math.isclose()
  10. while读文件忘了判断空行
     → 读到文件末尾还在循环。用while line:自动处理

十二、速查表

知识点
写法/结论
基本语法
while 条件:
 + 缩进循环体
计数器三件套
初始化 → 判断条件 → 更新(缺一不可)
强制退出
break
(终止整个循环)
跳过本轮
continue
(进入下一轮判断)
正常结束善后
else
(没被break才执行)
无限循环模板
while True:
 + if 条件: break
多条件退出
设flag = True,条件满足时flag = False
while处理列表
while list:
 + list.pop()
死循环急救
Ctrl + C
 强制中断
while vs for选型
已知次数用for,条件未知用while

总结: while循环就是"盯着条件干活"——条件True就继续,False就停。记住三件事:计数器必须更新、break是急刹车、else是正常结束的善后。搞定这三点,while就不会翻车。

往期推荐

三菱FX5U温控实战:从零搭建一套工业加热系统

S7-1500自动分拣加工系统:从架构到程序

从传感器到气缸,手把手教写出能跑的程序

点胶轨迹实操:多轴插补从入门到良品率99.9%

S7-1200运动控制轴,从0到1玩转工艺对象,别再对着脉冲发呆了

三菱FR-D700变频器参数设置与实操指南——从面板操作到现场调试

用SCL写S7-1200 Modbus通讯,少走半年弯路

升降控制系统程序架构设计及组态——从硬件选型到安全联锁

S7-1200定时器四种工作类型+时间数据类型转换

西门子触摸屏弹窗公共调用,一个弹窗控制所有设备,有会的吗?

S7-1200 FB功能块封装调用 & UDT用户数据类型创建

PLC常见故障原因及处理:老电工30年经验的排查铁律

从HMI到MES,把数据链路打通

PLC调试顺序:离线检查→手动调试→自动调试→故障模拟,一步都不能少

S7-1200 Modbus通讯功能块优化封装:从"能用"到"好用"的进阶之路

西门子单站控制:从I/O分配到手动自动切换

最新文章

随机文章