学径 LearnPath

循环

1 / 1 · ← → 翻页

阅读模式

第 5 课

循环

把人无法耐心完成的重复交给计算机。

福特高地公园工厂装配线,1913年
福特高地公园工厂装配线,1913年。来源:美国国家档案馆 / Wikimedia Commons,公有领域。

导言

课程目标

用 while 或 for...in... 写出循环。

需要时,用 break / continue 提前处理。

现象

未到温度,就回到测温

电热水壶烧水的流程图:未达到温度时箭头回到加热
电热水壶烧水的流程图。如果不满足条件就回到前面的测温环节,直到温度达到。

现象

工厂把重复交给岗位

福特高地公园工厂装配线,1913年
福特高地公园工厂装配线,1913年。来源:美国国家档案馆 / Wikimedia Commons,公有领域。

变的是零件,不变的是动作。

原理

while:条件成立就再走一遍

python
n = 5
while n > 0:
    print(n)
    n = n - 1
  • 外表像 if,但会反复回来
  • n 减到 0,条件才不再成立

把 while 改成 if,对照只打印一次。

辨析

不改 n,就停不下来

python
n = 5
while n > 0:
    print(n)

为了避免死循环,条件所依赖的变量应该在循环过程中进行改变。

提醒:这段是死循环,课堂演示后立刻停掉。

原理

for...in...:依次拿过每个值

python
for i in 0, 1, 2, 3:
    print(i**2)
  • 子结构跑四轮
  • 每一轮的 i 依次是 0、1、2、3

指出每一轮开始时 i 被赋成下一个值。

原理

range:前闭后开的区间

python
for i in range(0, 5):
    print(i**2)
  • range(a, b) 含 a,不含 b
  • 从 0 起时,起点可以省略

核对打印的是 0 到 4 的平方,没有 5。

例证

第三个数是步长

python
for i in range(2, 10, 2):
    print(i)
  • 2、4、6、8,不含 10
  • 间隔不必是 1

问:有没有可能用负数步长做倒数?

原理

循环里还可以再套循环

python
a = 4
while a > 0:
    for i in range(a):
        print(a)
    a -= 1
  • while 与 for 可以混用
  • 循环变量不要同名,避免冲突

指出内层 for 的圈数随 a 变化。

原理

break:提前结束循环

python
for n in range(10, 20):
    if n % 3 == 0:
        print(n)
        break
  • 只打印第一个:12
  • 后面的循环将不会被执行

对照:若去掉 break,15 和 18 也会打印。

原理

continue:跳过这一轮循环

python
for n in range(10, 20):
    if n % 3 != 0:
        continue
    print(n)
  • 跳过本轮剩余语句
  • 循环本身还在继续

对照上一页:这里 12、15、18 都会留下。

实践

本节练习

从 1 起,小于 50 就打印,再加 7。

序列:1 8 15 22 29 36 43。

50 不打印。

请打开「在线 IDE」。先写清什么在变、何时停。

小结

本节要点

  • 流程图里有向回的箭头时,同一段可以重复,直到条件把流程带出——这就是循环结构。
  • while 在条件成立时反复执行子结构;必须在子结构里改变条件所依赖的量,否则会进入死循环。与 if 外表相似,但 if 只走一次。
  • for...in... 依次遍历给出的值;range(a, b) 是前闭后开,可省略起点 0,也可用第三个数设步长。
  • break 提前结束整个循环;continue 跳过本轮剩余语句,进入下一轮。
已到最后一页。可按 ← 回顾,或切换回阅读模式。