学径 LearnPath

CAICP-E · Python 编程基础 / Wiki

循环

让电脑把同一件事做一遍又一遍。

它是什么

循环 把重复交给电脑。 人会烦,电脑不会。

数 1 到 100、给全班每人打印一张奖状、把列表里每个分数看一遍: 这些都不必把同一行抄一百次。 写一个循环,让它转圈。

最常见的一种是 for ... in ...。 它适合「对每个都做一次」,或「已知要做几遍」。

python
for n in range(3):
    print(n)

会打印 0、1、2。

次数事先不清楚时,改用 while。 条件还真,就再做一圈。

名字从哪来

循环的英文是 loop,原意是「圈」「环」。 程序走到末尾,再跳回开头,像绕圈。

forwhile 这两个词,来自 C 语言家族。 更早的 FORTRAN 用 DO 表示「做若干次」。 Python 的 for 更像「对每一个」:它走过一段序列,而不是自己用计数器加到某个数。

range 是 Python 准备的整数序列帮手。 for n in range(5) 读起来像:对 0 到 4 里的每一个 n。

循环体要 缩进for 后面要冒号。 这和 if 同一套规矩。

它怎么工作

range(n) 从 0 开始。 一共 n 个数。 不停在 n 上,停在 n 前面。

range(1, 6) 是 1 到 5。 左闭右开。 第三个参数是步长:range(0, 10, 2) 得到偶数。

也可以直接走过 列表字符串

python
for s in [90, 85]:
    print(s)

for ch in "hi":
    print(ch)

循环里可以累加,也可以再写 if

python
total = 0
for n in [90, 85, 70]:
    total = total + n
print(total)

累加先准备一个盒子。 每一圈加上去。 循环结束,盒子里就是结果。

break 立刻离开循环。 continue 跳过本圈剩下的句子,进入下一圈。 pass 什么也不做,只占位置。

循环还可以套循环,见 嵌套

range 也是一种 内置函数

怎么选 for 还是 while:

  • 次数明确,或要走过一组东西:用 for
  • 停不停取决于条件:用 while

例如:打印 1 到 5,用 for n in range(1, 6)。 例如:一直问,直到输入 stop,用 while

生活里在哪里

  • 值日:每一天擦一次黑板。
  • 跳绳:同一组动作重复很多下。
  • 发本子:对每一个同学发一本。
  • 音乐节拍:反复同一段节奏。
  • 工厂流水线:对每一个零件做相同检查。

生活里「对每一个」最像 for。 「一直做到某种情况出现」最像 while。

和相近概念的差别

顺序:做一次就往下。 分支:选一条路。 循环:同一条路走很多遍。

for 事先知道要走过谁。 while 事先只知道停的条件。

range(3) 不是列表本身,但它能产生 0、1、2。 需要真的列表时,可以 list(range(3))

break 离开循环,不是结束整个程序。 函数里的 return 才会把函数结束。 见 函数

常见误会

误会 1:以为 range(3) 含 3。

它停在 3 前面。 得到 0、1、2。

误会 2:循环体忘了缩进,或忘了冒号。

身体不属于 for,循环就空了。

误会 3:把 for 的次数和 while 的条件搞混。

for 走序列。 while 问真假。

误会 4:累加忘记先把盒子清成 0。

没有起点,每一圈往哪加?

误会 5:循环变量名字和外面的变量搅在一起。

for n in ... 会改写 n。 外面如果也在用 n,可能被覆盖。

想知道更多

  • 书:潘洪波《小学生 Python 趣味编程》(打印图案、累加分数,都是循环的典型练习)。
  • 书:埃里克·马瑟斯《Python 编程:从入门到实践》(循环一章可以和家长一起改「重复几遍」)。

未登录时不会保存学习进度