专项练习 · 8 分钟阅读

Python while 循环练习:覆盖大多数问题的 5 个模式

大多数 while 循环题都是五个基本模式的变体。先认出模式,再写条件和更新语句,就不用凭感觉试。

模式 1:让条件逐步变为假

先设定一个值,测试它,再在循环体里修改它。更新语句不是可选项,它决定循环能否结束。运行前先预测输出。

count = 3
while count > 0:
    print(count)
    count -= 1
print("Liftoff")

可预测的倒计时

模式 2:遇到哨兵值停止

哨兵值是一个表示“停止”的特殊值。同时检查索引和值,避免循环越过序列末尾。这和“一直读取输入,直到用户输入 quit”是同一个思路。

commands = ["start", "check", "quit", "ignored"]
i = 0
while i < len(commands) and commands[i] != "quit":
    print(commands[i])
    i += 1

在哨兵值前停止

模式 3:用 break 提前退出

当停止条件写在循环体里更自然时,用 break。把退出语句放在触发条件附近,读者就不用到处寻找循环的出口。

prices = [3.0, 6.0, 4.5]
i = 0
while i < len(prices):
    if prices[i] > 5:
        print(prices[i])
        break
    i += 1

找到第一个匹配项

模式 4:累加到上限

在循环前创建累加器,在循环内更新,在循环结束后打印。条件里的上限可以避免意外地无限累加。先手算前两次迭代,再相信结果。

total = 0
n = 1
while total < 10:
    total += n
    n += 1
print(total)

有上限的累加

调试死循环

如果循环永远不结束,先在循环体顶部打印循环变量。检查更新是否在循环内、条件运算符是否正确,以及某个分支是否跳过了更新。然后用小输入重新运行。

n = 0
while n < 3:
    print("top", n)
    n += 1
print("done", n)

观察变化中的值

你的练习清单

常见问题

什么时候用 while 而不是 for?

重复次数未知时用 while,例如读到哨兵值或反复重试直到条件改变。已经有集合或已知范围时,用 for。

为什么我的 while 循环永远不结束?

条件可能永远不会变成假。检查计数器更新、比较运算符,以及 continue 是否跳过了更新。

break 是不好的写法吗?

不是。break 能让提前退出更清楚时就可以用。一个循环里出现太多 break,通常说明应该拆成更小的步骤。

练习 while 循环

12 道题,覆盖条件、计数器、break、continue 和安全退出。

打开练习

继续阅读: