跳转到主要内容
模块 2 · 第 2 课(共 4)课程中的6/36~8 min
模块课程(2/4)

while 循环

只要条件保持为真,while 循环就会重复一个块。使用 while 当您事先不知道需要多少次迭代时: 轮数取决于循环内发生的变化。

句法

Python
n = 1
while n < 1000:
    n = n * 2
n  # 1024

缩进的块会被重复执行。每次迭代之前 Python 评估条件:一旦变为假,循环就会终止并 该块之后继续执行。

常见模式

手动计数器 — 相当于其他语言中的经典 for:

Python
i = 0
while i < 5:
    print(i)
    i = i + 1

无限循环 + 内部退出条件 — 当条件满足时有用 做某事后评价:

Python
acc = 0
while True:
    acc = acc + 1
    if acc * acc > 100:
        break
acc  # 11   (11*11 = 121 is the first square > 100)

break 立即从最内层循环退出(我们将在下一个循环中看到它) 课)。

经典错误:无限循环

如果条件中的变量在循环内不改变,则 程序永远不会终止。这是 while 的头号错误:

Python
n = 0
while n < 10:
    print(n)   # n is never modified → infinite loop!

在我们的练习中存在执行超时,因此无限循环将会失败 带有明确的消息,而不是冻结浏览器。但在生产中 无限循环是一个严重的错误。

无限循环风险和终止条件

只要 while 循环的条件计算结果为 True,它就会执行。如果您忘记更新影响条件的变量,则循环将无限运行,从而冻结运行时。始终确保循环体朝着退出条件前进。

自己尝试一下

锻炼#python.m2.l2.e1
尝试:0加载中...

找到最小整数“n >= 1”,使得 2**n 超过一百万。将其分配给“result”并对其进行评估(应该是 20)。

正在加载编辑器...
显示提示

2**20 = 1,048,576 是第一个超过 1,000,000 的。

3 次尝试后可用的解决方案

复习练习

锻炼#python.m2.l2.e2
尝试:0加载中...

从“n = 1000”开始,用整数除法(n // 2)将n减半,直到变为0。计算“steps”中需要迭代多少次。评估“步骤”。

正在加载编辑器...
显示提示

1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0:十步。

3 次尝试后可用的解决方案

额外的挑战

锻炼#python.m2.l2.e3
尝试:0加载中...

Given the variable `n = 32`, write a `while` loop to count how many times you can divide `n` by 2 (using floor division `//`) before `n` becomes less than or equal to 1. Store the count in `divisions` and evaluate it.

正在加载编辑器...
显示提示

The while condition is n > 1. Inside the loop, divide n by 2 and increment divisions by 1.

3 次尝试后可用的解决方案