while 循环
条件还真,就再做一圈。次数事先不清楚时很常用。
它是什么
while 适合次数事先不清楚的重复。 它问:条件还真吗? 真就再做一圈。 假就离开。
你不知道对方要猜几次才猜中。 你不知道密码哪一次才输入正确。 这种「直到某件事发生」的重复,用 while 更自然。
n = 1
while n <= 3:
print(n)
n = n + 1每一圈都要让条件有机会变假。
忘记改 n,可能变成死循环。
名字从哪来
while 是英语「当……的时候」「只要还……」。 这个词作为关键字,同样来自 C 语言家族。 更早的 ALGOL 也有 while。
Python 把英语读法留了下来: while 条件为真,就继续。 它和 循环 里的 for 是一对常用伙伴。
它怎么工作
while 也要冒号和 缩进。
常见三件套:
- 开始前,准备好要用的 变量
- 写清楚继续转圈的条件
- 圈子里更新变量,让条件迟早能变假
guess = ""
while guess != "python":
guess = input("猜一种语言:")
print("猜对了")这里事先不知道要猜几轮。 所以不用 for。
break 和 continue
break 立刻离开整个循环。
continue 结束本圈,进入下一圈。
在 while 里用 continue 前,先想好条件有没有更新。
不然可能卡死。
它们在 for 里意思相同。
pass
pass 是空操作。
语法上这里必须有一句时,用它占位。
if True:
pass它不会结束程序。 也不会跳出循环。
死循环长这样:条件一直为真,却永远不改、也不 break。 有时故意写成「一直等到某件事」,再用 break 离开。 那是有计划的。 忘记离开,屏幕会一直刷,只能强制停掉。
生活里在哪里
- 洗碗:盘子还没洗完,就继续洗。
- 猜谜:没猜中就再猜。
- 等电梯:门还没开,就还在等。
- 体温:还在发烧就继续休息。
- 游戏:生命值还大于 0,就继续一局。
「还有没有」比「一共几次」更清楚时,就是 while 的地盘。
和相近概念的差别
for:已知要走过谁,或已知次数。 while:已知停的条件,次数可以到了才知道。
if 也问条件。
if 只问一次。
while 每圈都问。
见 分支。
break 离开循环。
return 离开函数。
二者不是同一个出口。
常见误会
误会 1:条件永远为真。
忘记更新变量,就会死循环。
误会 2:把 while 写成 for 的次数思维,却忘了更新变量。
while 不会自动加 1。
要自己写 n = n + 1。
误会 3:continue 放在 n = n + 1 前面,又没有别的更新。
条件不变,下一圈还是同样的困境。
误会 4:有计划的「一直等到」也算写错了。
条件一直为真,但圈子里会 break 离开,这是有出口的。 真正危险的,是永远出不去。
想知道更多
- 书:潘洪波《小学生 Python 趣味编程》(用猜谜、一直问到对这类游戏体会 while)。
- 书:埃里克·马瑟斯《Python 编程:从入门到实践》(用户输入校验常用 while,可以和家长一起看「直到输入正确」)。
未登录时不会保存学习进度