while 循环
上一页的 for 走的是已经备好的值:range 里的数,或者 tea 的字母。while 不带现成的清单。在缩进行之前,每一轮都先问一个问题,第一轮也不例外。答案是 True,那些行才执行。循环里面的数如果不改,问题就不会变成 False,循环也就停不下来。
把 cups 设成 0。问题是 cups < 3。零过得去,于是写出 0,cups 往前走一步。1 也一样,然后是 2。写出 2 之后,cups 变成 3。问题不过了。屏幕上没有 3。它留在 cups 里,问题正是因此不过。
cups = 0
while cups < 3:
print(cups)
cups = cups + 1
你会看到三行:0,然后 1,然后 2。循环结束后 cups 里是 3。循环本身不打印这个 3,因为只有问题过了,print 才轮到。想看见 3,就把 print 写在和 while 对齐的位置,放在循环外面。
一开始就过了界,缩进行不会轮到
在 while 之前把 cups 设成 3。第一个问题立刻不过。循环里面的行一次也不执行。done 和 while 对齐,所以不属于循环,在 while 决定停下之后写一次。
cups = 3
while cups < 3:
print(cups)
cups = cups + 1
print("done")
屏幕上只有 done。没有数字。print(cups) 在循环里面,而循环没有开始。
cups = cups + 1 这一行把数字往前推,直到问题终于不过。拿掉它:cups 停在 0,cups < 3 一直是 True,0 会一遍遍写出来。程序出不了这个循环。
while 后面要有冒号,和 for、if 一样。重复的行向里缩进四个空格。这个词用小写。大写 W 的 While 是 Python 不认识的名字,程序会停。
下一页可以更早停住
这一页等到问题自己变成 False。下一页做的是另一件事:跳出循环,或者跳过一轮,赶在问题自己不过之前。
先猜
- cups 从 0 开始,问题是 cups < 3。写出哪些数?
- 循环之后,cups 里留下哪个数,尽管它没被写出来?
- cups 从 3 开始,done 和 while 对齐。出现什么?
- 你删掉 cups = cups + 1。循环结束吗?
容易错的地方
- 把最后的 3 当成已经打印的一行
- cups 在 while 之前已经是 3,却还等着一个数字
- 漏掉 cups = cups + 1,等一行永远不会来的最后输出
- 漏掉 while 后面的冒号
- 把 While 写成大写
带走这些
while 在每一轮之前发问。缩进行只有在答案是 True 时才执行。
从 0 开始,条件是 cups < 3,你会看到 0、1 和 2。这时 cups 是 3,这个 3 不会被打印。
如果问题一开始就是 False,那些行一次也不执行,和 while 对齐的那一行仍然执行一次。
没有 cups = cups + 1,问题一直是 True,循环不会结束。
下一页可以跳出循环,或者跳过一轮。
🧠 测试您的知识
测试您的知识
通过这个互动测验挑战自己,看看你对这个主题的理解程度如何
📝 说明
- 仔细阅读每个问题
- 为每个问题选择最佳答案
- 您可以随时重新参加测验
- 您的进度将显示在顶部