学径XUEJING · 个人学习平台通知设置

课程库 AI 主线 Python 第一步 › 第 6

循环(下)—— while 与循环控制

普通课50 分钟

本课导读

for 适合"重复 n 次",但很多事你事先不知道要重复几次——烧水要烧到开,不是"加热 10 次"。这就是 while 的地盘:只要条件还成立,就一直做。本课学 while、两个循环控制开关 break/continue,以及每个程序员都写过一次的 bug——死循环。

while:烧水直到开

while 的读法就是字面意思:"条件成立时,反复执行":

Python

执行过程:检查 count > 0 → 成立就执行循环体 → 回头再检查 → ……直到某次检查不成立,循环结束。和 for 对比:

forwhile
适合次数已知("发 50 封邮件")次数未知("存到 5000 为止")
停止方式那串东西遍历完了条件变成 False 了
口诀重复 n 次直到……为止

一个"次数未知"的真实例子——每月存 800,存到 5000 要几个月:

Python

你没有告诉程序"循环 7 次"——它自己算到条件不满足为止。这类"模拟到达成为止"的问题,while 是唯一自然的写法。

死循环:每个人都会写一次的 bug

看这段代码(别在页面里跑它,会把页面卡死):

count = 5
while count > 0:
    print("还在转……")
    # 忘了写 count = count - 1

count 永远是 5,条件永远成立,循环永远不停——这就是死循环。它是 while 的头号陷阱,成因几乎只有一个:

循环体内忘了改变"条件里的那个变量"。

所以写 while 时养成一个检查习惯:写完条件,立刻问自己——"循环体里有没有哪行代码,能让这个条件终有一天变成 False?"没有,就是死循环。

注意

在本页的运行环境里,死循环会让浏览器标签页失去响应(只能关掉页面重开,别慌,不会有别的损失)。这也是所有编程环境的共同现实:计算机绝对忠诚地执行你的指令——包括错误的指令。

break:提前收工

有时循环还没自然结束,但目的已经达到,可以用 break 立刻跳出整个循环:

Python

注意输出:找到 6 之后,7、8、9、10 根本没被检查——break 直接终结了循环。找东西"找到就停",是它最常见的用法(数据量大时还能省下大量无用功)。

continue:跳过这一圈

continue 温和一些:只跳过本圈剩下的部分,直接进入下一圈:

Python

3、6、9 没被打印——轮到它们时,continue 让循环"跳过本圈、继续下圈"。对比记忆:break 是离场,continue 是弃权一轮

✍️ 练习

练习 1:超过 100 的那一刻

从 1 开始累加(1+2+3+…),加到总和首次超过 100 时停下,打印此时加到了几、总和是多少。(答案应该是加到 14,总和 105。)

Python
💡 提示

"加到……为止"是 while 的信号。两个变量:n(加到几了)和 total(累加器),条件是 total <= 100

✅ 参考答案
total = 0
n = 0

while total <= 100:
    n = n + 1
    total = total + n

print(f"加到 {n} 时总和 {total},首次超过 100")

检查一下防死循环习惯:循环体里 total 在增长,条件终会变 False——安全。

练习 2:过滤打印

打印 1~20 中所有不是 4 的倍数的数,用 continue 实现。

Python
✅ 参考答案
for n in range(1, 21):
    if n % 4 == 0:
        continue
    print(n)

当然,用 if n % 4 != 0: print(n) 不用 continue 也能做——continue 的优势在条件复杂时能让主逻辑少一层缩进,现在先把语感建立起来。

练习 3:对折上珠峰(挑战)

一张 0.1 毫米(0.0001 米)的纸,每对折一次厚度翻倍。对折多少次后厚度能超过珠穆朗玛峰(8848 米)?用 while 算出来——答案会让你惊讶。

Python
💡 提示

条件:thickness < 8848。循环体:厚度翻倍(thickness * 2)、折数加一。

✅ 参考答案
thickness = 0.0001
folds = 0

while thickness < 8848:
    thickness = thickness * 2
    folds = folds + 1

print(f"对折 {folds} 次后厚度 {thickness} 米,超过珠峰!")

只要 27 次。指数增长的威力远超直觉——顺便说,大模型的算力增长故事(Scaling Law)背后就是这种曲线。

随堂测验

随堂测验0 / 5 题正确

1. “不断提醒用户重新输入密码,直到输对为止”——这个需求最适合用什么实现?

2. 一个 while 循环成了死循环,最常见的原因是?

3. break 和 continue 的区别是?

4. count = 3,执行 while count > 0: count = count - 1,循环体总共执行几次?

5. for n in range(1, 6): if n == 3: break; print(n) —— 会打印哪些数?

本课小结

  • while = "直到……为止":次数未知的重复;for = "重复 n 次"
  • 防死循环自查:循环体里必须有代码能让条件终变 False
  • break 离场(跳出整个循环),continue 弃权一轮(跳过本圈)
  • 你已经集齐了顺序、分支、循环——程序世界的全部三种基本结构

下一课把它们全部用上:从零搭一个完整的猜数字游戏,你的第一个"真正的程序"。

划选正文任意文字可高亮、批注或加入复习卡

讨论

载入中…