用 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()逐步执行
- L1range(6) 准备好 0 到 5 这六个值。第一轮:i = 0。
i = 0 - L2执行循环体:小码走一格。
i = 0 - L1回到开头:i = 1,再执行一次循环体。
i = 1 - L2……一直重复到 i = 5,也就是第六轮。
i = 5 - •range(6) 里的值用完了,循环结束。小码在旗子上。
循环之后的行
在互动课里运行第 3 行没有缩进,所以它只在所有移动结束后运行一次。
for i in range(2):
move()
turn_right()
for i in range(3):
move()逐步执行
- L2第一个循环:向东走两格。
- L3循环结束,右转一次。
- L5第二个循环:向下走三格到旗子。
常见错误
漏了冒号或缩进
for i in range(3) 后面没有 : 是语法错误。循环体没缩进也会报错:Python 不知道要重复哪几行。
把只运行一次的行也缩进了
如果 turn_right() 也缩进了,它就变成循环体的一部分,每一轮都会执行。
小测验
1. 小码最后停在哪里?
for i in range(4):
move()查看答案
答案:A
range(4) 有 4 轮,就是 4 步,正好到旗子。
2. 小码最后停在哪里?
for i in range(3):
move()
pick()查看答案
答案:B
pick() 在走完三步后只执行一次。小码在宝石上,但没有指令让它走到旗子。
动手练习
3 道练习,分三层:先预测程序的输出,再按新需求改程序,最后从零写一个。代码在浏览器里运行,提交马上判题。
- 预测输出数一数走了几步
小码走了多远?
- 改需求更长的走廊
走廊变成 9 格长了。改一下循环让小码走到旗子,仍然只用 2 行。
- 从零写长长的 L
向东 7 格,再向上 3 格。用循环来写,最多 5 行。
本课术语
| 术语 | 中文 | 英文定义 |
|---|---|---|
| Loop | 循环 | A structure that repeats a block of code. |
| for loop | for 循环 | 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. |