打开课程目录
Module 4预计 90 分钟

while、停止条件与循环控制

让条件控制重复,并安全处理提前结束或跳过一轮

学习目标

能够追踪 while condition 与状态更新,识别并停止 Infinite loop,能够使用 break 结束循环,并认识和尝试使用 continue 跳过当前一轮。

开始之前

for 适合重复次数或数字范围已经明确的任务。有些任务不知道会重复几次,只知道“条件还成立就继续”,这时可以使用 while。

while 的核心是一个会反复检查的 Boolean condition。要让循环最终停止,循环内部通常必须改变这个条件依赖的变量。

概念 01

while loop 在 Condition 为 True 时继续重复

当重复次数不能预先确定、但停止条件很清楚时,while 可以直接把这个条件写进程序。

while loop 的英文全称是 while loop,中文叫 while 循环,Python 写成 while condition:。它表示“只要条件仍然是 True,就继续执行缩进代码”。实际可用于等待正确输入、倒计时或重复到某个状态出现。

Condition-controlled repetition 的英文全称是 Condition-controlled repetition,中文可理解为由条件控制的重复。while 每轮开始前都重新检查 M3 学过的 Condition 和 Boolean result;为 True 就运行 body(循环体),为 False 就停止。

执行追踪从 count → 1 开始:检查 count <= 5 得到 True,显示 1,再执行 count = count + 1,让 count → 2;随后重新检查。到 count → 6 时,6 <= 5 得到 False,循环停止。

while 执行追踪表:检查次数 | count before | condition | output | count after;1 | 1 | True | 1 | 2;2 | 2 | True | 2 | 3;3 | 3 | True | 3 | 4;4 | 4 | True | 4 | 5;5 | 5 | True | 5 | 6;6 | 6 | False | 无 | 6。

State update 的英文可理解为状态更新,这里不把它发展成复杂术语。count = count + 1 改变 condition 依赖的变量,是循环最终从 True 走到 False 的原因。for 适合明确范围,while 适合只知道停止条件。

  • while:条件为 True 就继续
  • 每轮开始前重新检查 condition
  • 状态更新让 condition 最终变成 False
  • for 适合明确范围,while 适合停止条件
  • 逐轮记录检查、输出和更新

追踪 count 直到条件变成 False

每轮先检查 count <= 5,再显示并更新 count。count 变成 6 后,条件为 False,因此不会出现第六次输出。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

预期结果:1 / 2 / 3 / 4 / 5

概念 02

Infinite loop 表示停止条件永远没有机会变成 False

循环一旦无法停止,就会持续占用运行时间;学习安全停止并检查状态变化,是编写 while 的基本能力。

Infinite loop 的英文全称是 Infinite loop,中文叫死循环。它表示循环的停止条件永远不会变成 False,因此程序不断运行。例如 remaining = 3 且 while remaining > 0: 中从不更新 remaining,条件会一直是 3 > 0。

遇到 Terminal 持续输出或运行状态一直不结束时,第一步点击网站的 Stop。Stop 会终止当前 Worker;超时保护也会终止并替换 Worker,避免这段代码继续占用页面。

停止后按三步检查:先看 while condition 依赖哪个变量;再看循环 body(循环体)是否真的修改了它;最后用小初始值并临时 print() 该变量,追踪每轮状态。没有报 Python exception 不代表循环逻辑正确。

修复方向不是随意增加 break,而是先确认循环本来的停止规则。如果 condition 依赖 remaining,就应该让每轮状态更新把 remaining 逐步推向会使条件为 False 的值。

  • Infinite loop:条件永远不会变成 False
  • 先 Stop,再检查 condition
  • 找出负责更新状态的代码
  • 用小输入和 print() 追踪
  • 不要用随意添加 break 掩盖错误条件

运行后需要 Stop 的死循环

remaining 始终是 3,所以 remaining > 0 永远是 True。停止后应检查循环内缺少了让 remaining 接近 0 的状态更新。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

预期结果:3 会不断重复;点击 Stop,或等待平台报告 TimeoutError。

概念 03

break statement 立即结束当前循环

有些循环本来需要持续等待,但某个目标一旦达成,就应该立即退出而不是继续多余的轮次。

break statement 的英文全称是 break statement,中文叫 break 语句,Python 关键字写成 break。执行到 break 时,Python 会立即结束当前循环,并继续执行循环之后的代码。

示例使用 while True:。True 是 M1 学过的 Boolean,因此这个 condition 本来会一直成立;当 guess == secret 时,if 进入正确路径并执行 break,循环才结束。这里的实际用途是等待正确输入后立刻停止。

不要因此认为所有 while 都应该写 while True。能够自然写出 count <= 5 等停止条件时,应优先让 condition 自己变成 False;while True 通常需要一条清楚、可到达的 break 路径。

完整程序链是 input() → comparison → if → break。错误输入会显示 Try again 并进入下一轮,正确输入会显示 Correct 并立刻结束。

  • break 立即结束整个当前循环
  • while True 的条件一直为 True
  • while True 必须有清楚可达的退出路径
  • if 可以决定何时 break
  • 退出后继续执行循环之后的代码

输入正确密码后立即退出

错误输入不会触发 break;正确输入让 comparison 为 True,程序显示 Correct 并结束 while。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

预期结果:输入错误:Password: Try again,然后继续等待 / 输入 python:Password: Correct,然后结束

概念 04

continue statement 只跳过当前这一轮

循环处理一系列轮次时,有时只想忽略某个当前值,而不是结束后面的所有工作。

continue statement 的英文全称是 continue statement,中文叫 continue 语句,Python 关键字写成 continue。执行后,Python 会跳过当前这一轮尚未运行的代码,直接进入下一轮。

在 for number in range(1, 6): 中,当 number == 3 时执行 continue,因此这一轮的 print(number) 被跳过;后面的 4 和 5 仍然正常处理。它实际可用于忽略某个不需要的当前值。

break 与 continue 的区别:break 结束整个循环,后续轮次都不再发生;continue 只结束当前这一轮,循环仍会继续。读代码时要问:目标是“全部停止”,还是“只跳过本轮”?

  • continue 跳过当前轮剩余代码
  • 下一轮仍会继续
  • break 结束整个循环
  • continue 适合忽略当前值
  • 先判断目标是停止还是跳过

跳过 3,但继续输出后续数字

number 为 3 的当前轮跳过 print(),但循环没有结束,因此 4 和 5 仍会输出。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

预期结果:1 / 2 / 4 / 5

常见错误

这些写法为什么不工作

错误不是失败,而是 Python 告诉你“这部分我无法理解”。先找到差异,再一次只改一个问题。

while condition 依赖的变量没有更新

condition 依赖 attempts,但循环内部没有改变 attempts,因此 False 永远不会到来。先 Stop,再打印 attempts 或逐轮记录它的值。

attempts = 0
while attempts < 3:
    print(attempts)
改成
attempts = 0
while attempts < 3:
    print(attempts)
    attempts = attempts + 1

continue 跳过了 while 的状态更新

while 中如果 continue 出现在状态更新之前,当前值可能永远不变并形成死循环。使用 continue 前要确认下一轮所需的状态已经更新。

count = 1
while count <= 3:
    if count == 2:
        continue
    count = count + 1
改成
count = 1
while count <= 3:
    if count == 2:
        count = count + 1
        continue
    count = count + 1

引导修改

使用 continue 跳过 4

这不是正式练习。跟着步骤修改已有代码,观察每次改变如何影响程序。

  1. 1先运行代码,确认它输出 1 到 6。
  2. 2在 print(number) 之前加入 if,检查 number 是否等于 4。
  3. 3条件成立时使用 continue,再运行并确认只有 4 被跳过,5 和 6 仍然输出。

完成后:输出 1、2、3、5、6;4 的当前轮被跳过,但整个循环没有结束。

修改这段代码

先运行,再按左侧步骤逐项修改。你的草稿会保存在这个浏览器中。

Python
代码编辑器将在滚动到这里时加载
点击运行时准备 Python
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

正式练习

现在独立完成 2 道练习

先运行代码观察问题,再点击“检查答案”。检查只关心题目要求的结果,不要求你照抄参考写法。

正式练习

修复不会停止的计数循环

练习 1/2

程序应该依次输出 1、2、3、4、5 后停止,但当前会不断重复。先 Run 观察,再使用 Stop;检查 while condition 依赖的 count,以及循环 body 中 count 每轮的状态。修复程序,并保留 while 和 count 变量。

8 分钟难度 2/3修复错误
代码编辑器将在滚动到这里时加载
TERMINAL程序输出

点击“运行”后,程序输出会显示在这里。

需要一点提示?

先自己尝试一次;卡住时再逐级打开提示。

本课总结

本课小结

  • 1while loop 在 condition 为 True 时继续,状态更新应让它最终变成 False。
  • 2Infinite loop 出现时先 Stop,再检查 condition 依赖的变量是否在循环内变化。
  • 3break 结束整个循环;continue 只跳过当前一轮。
  • 4循环调试依靠小输入、边界值、逐轮追踪和 print(),没有异常也可能存在 Logic error。