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

用 for 重复 · 机器人闯关

怎样重复一条指令,而不用一遍遍地重写?

课程目录

为什么需要它

走 12 格就写 12 行 move(),能用,但写起来慢、容易数错,要改也麻烦。程序员几乎从不把同一行复制很多遍,而是写一个循环 Loop:「把这件事做 N 次」。

直觉理解

教练会说「跑 5 圈」,而不是「跑一圈、跑一圈、跑一圈、跑一圈、跑一圈」。

用 Python 写就是:

for i in range(5):
    move()
  • range(5) 表示「5 次」。
  • 行末的冒号 : 表示「要重复的部分在下面」。
  • 要重复的行缩进 Indentation 4 个空格,这一块叫循环体 Loop body。
  • i 是 Python 帮你自动更新的计数器(0、1、2、3、4),可以不用它。

没有缩进的行只运行一次,而且是在整个循环结束之后。

定义

for 循环 for loop

A for loop repeats its indented body once for each value in a sequence; for i in range(n) repeats it n times.
for 循环对序列里的每个值都执行一次缩进的循环体;for i in range(n) 就是重复 n 次。

缩进 Indentation

In Python, indentation (4 spaces) shows which lines belong to a block, such as the body of a loop.
在 Python 里,缩进(4 个空格)表示哪些行属于同一个代码块,比如循环体。

在编辑器里按 Tab 就会插入 4 个空格。

示例

六步,两行

在互动课里运行

看第 2 行亮六次,第 1 行在计数。

for i in range(6):
    move()
逐步执行
  1. L1range(6) 准备好 0 到 5 这六个值。第一轮:i = 0。i = 0
  2. L2执行循环体:小码走一格。i = 0
  3. L1回到开头:i = 1,再执行一次循环体。i = 1
  4. L2……一直重复到 i = 5,也就是第六轮。i = 5
  5. •range(6) 里的值用完了,循环结束。小码在旗子上。

循环之后的行

在互动课里运行

第 3 行没有缩进,所以它只在所有移动结束后运行一次。

for i in range(2):
    move()
turn_right()
for i in range(3):
    move()
逐步执行
  1. L2第一个循环:向东走两格。
  2. L3循环结束,右转一次。
  3. L5第二个循环:向下走三格到旗子。

常见错误

漏了冒号或缩进

for i in range(3) 后面没有 : 是语法错误。循环体没缩进也会报错:Python 不知道要重复哪几行。

把只运行一次的行也缩进了

如果 turn_right() 也缩进了,它就变成循环体的一部分,每一轮都会执行。

小测验

1. 小码最后停在哪里?

for i in range(4):
    move()
  1. A旗子上
  2. B旗子前一格
  3. C撞墙
查看答案

答案:A

range(4) 有 4 轮,就是 4 步,正好到旗子。

2. 小码最后停在哪里?

for i in range(3):
    move()
pick()
  1. A旗子上
  2. B在宝石那格,宝石已捡
  3. C报错:这里没有宝石
查看答案

答案:B

pick() 在走完三步后只执行一次。小码在宝石上,但没有指令让它走到旗子。

动手练习

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

  1. 预测输出数一数走了几步

    小码走了多远?

  2. 改需求更长的走廊

    走廊变成 9 格长了。改一下循环让小码走到旗子,仍然只用 2 行。

  3. 从零写长长的 L

    向东 7 格,再向上 3 格。用循环来写,最多 5 行。

在互动课里练这一课

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

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

本课术语

术语中文英文定义
Loop循环A structure that repeats a block of code.
for loopfor 循环A loop that runs its body once for each value in a sequence, such as range(n).
Indentation缩进Spaces at the start of a line that show which block the line belongs to.
Loop body循环体The indented lines that a loop repeats.