人人都能学编程
English 开始学习
课程 1 · 零基础入门第 8 课 / 共 10 课免费阅读

一直走:while · 机器人闯关

不知道要重复几次时,怎么重复?

课程目录

为什么需要它

for i in range(6) 需要知道 6 这个数。可是很多时候你并不知道:「一直走到墙为止」「一直走到旗子」。while 循环 while loop 只要条件为真就一直重复,所以无论路多长它都能适应。

直觉理解

「汤里还有疙瘩,就继续搅。」你不会去数搅了几下,而是看一眼、搅一下、再看一眼……一旦看到没疙瘩了就停。

while not at_goal():
    move()

每一轮 Python 都先问问题。not 会把答案反过来:小码还没到旗子时,not at_goal() 是 True。到了旗子它就变成 False,循环结束。

注意:如果循环体里没有任何东西能让条件变成 False,循环就永远停不下来,这叫死循环 Infinite loop。小码走太多步会自己停下,页面也会在几秒后自动停止运行。

定义

while 循环 while loop

A while loop repeats its body as long as its condition is True, checking the condition before every round.
while 循环在条件为 True 时不断重复循环体,每一轮开始前都会检查条件。

死循环 Infinite loop

An infinite loop is a loop whose condition never becomes False, so it never stops.
死循环是条件永远不会变成 False 的循环,所以它永远停不下来。

示例

一直走到旗子

在互动课里运行

想象走廊变长或变短:代码都不用改。

while not at_goal():
    move()
逐步执行
  1. L1检查:在旗子上吗?不在,所以 not at_goal() 是 True。at_goal() → False
  2. L2走一格,再回去检查。
  3. L1……每次移动前都要检查……
  4. L1到了旗子:not at_goal() 是 False,循环结束。at_goal() → True

连续两个 while

在互动课里运行

走到墙边,转身,再走到下一面墙。

while front_clear():
    move()
turn_left()
while front_clear():
    move()
逐步执行
  1. L1前面空吗?空:继续向东走。
  2. L1到墙边答案变成 False:第一个循环结束。
  3. L3左转朝上。
  4. L4第二个循环:向上走,直到旗子上方的墙。

常见错误

停不下来的循环

while not at_goal(): turn_left() 从来不移动,条件永远不会变。确保循环体能让小码一步步接近「条件变成 False」。

以为只检查一次

条件在每一轮开始前都会检查,不只是第一次。

小测验

1. 小码最后停在哪里?

while front_clear():
    move()
  1. A停在墙前
  2. B撞到墙上
  3. C一直停不下来
查看答案

答案:A

每次移动之前都先检查前面。前面是墙时条件为 False,循环停止:不会撞墙。

2. while 循环什么时候检查条件?

  1. A每一轮开始前
  2. B只在一开始检查一次
  3. C循环结束后才检查
查看答案

答案:A

检查、执行循环体、再检查……第一次检查为 False 时循环停止。

动手练习

3 道练习,分三层:先预测程序的输出,再按新需求改程序,最后从零写一个。代码在浏览器里运行,提交马上判题。

  1. 预测输出停在宝石上

    预测结果。

  2. 改需求任意长度

    这个 for 循环只适用于正好 5 格长的走廊。改成 while,让它在 3 张地图上都能通关。

  3. 从零写未知的 L

    每张地图都是大小不同的 L 形,路上有宝石。用 while 写一段程序,在 3 张地图上都捡完宝石并走到旗子。

在互动课里练这一课

打开互动课,这些例子都能直接改、直接运行,练习题提交马上判题。免费开始,不用注册。

互动课按顺序解锁:前面的课还没学,会先带你到课程地图。

本课术语

术语中文英文定义
while loopwhile 循环A loop that repeats while its condition is True.
Infinite loop死循环A loop whose condition never becomes False, so it never stops.
notnot 取反An operator that turns True into False and False into True.