模块课程(2/4)
while 循环
只要条件保持为真,while 循环就会重复一个块。使用
while 当您事先不知道需要多少次迭代时:
轮数取决于循环内发生的变化。
句法
n = 1
while n < 1000:
n = n * 2
n # 1024缩进的块会被重复执行。每次迭代之前 Python 评估条件:一旦变为假,循环就会终止并 该块之后继续执行。
常见模式
手动计数器 — 相当于其他语言中的经典 for:
i = 0
while i < 5:
print(i)
i = i + 1无限循环 + 内部退出条件 — 当条件满足时有用 做某事后评价:
acc = 0
while True:
acc = acc + 1
if acc * acc > 100:
break
acc # 11 (11*11 = 121 is the first square > 100)break 立即从最内层循环退出(我们将在下一个循环中看到它)
课)。
经典错误:无限循环
如果条件中的变量在循环内不改变,则
程序永远不会终止。这是 while 的头号错误:
n = 0
while n < 10:
print(n) # n is never modified → infinite loop!在我们的练习中存在执行超时,因此无限循环将会失败 带有明确的消息,而不是冻结浏览器。但在生产中 无限循环是一个严重的错误。
无限循环风险和终止条件
只要 while 循环的条件计算结果为 True,它就会执行。如果您忘记更新影响条件的变量,则循环将无限运行,从而冻结运行时。始终确保循环体朝着退出条件前进。
自己尝试一下
找到最小整数“n >= 1”,使得 2**n 超过一百万。将其分配给“result”并对其进行评估(应该是 20)。
显示提示
2**20 = 1,048,576 是第一个超过 1,000,000 的。
3 次尝试后可用的解决方案
复习练习
从“n = 1000”开始,用整数除法(n // 2)将n减半,直到变为0。计算“steps”中需要迭代多少次。评估“步骤”。
显示提示
1000 → 500 → 250 → 125 → 62 → 31 → 15 → 7 → 3 → 1 → 0:十步。
3 次尝试后可用的解决方案
额外的挑战
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 次尝试后可用的解决方案