学径 LearnPath

编程语言基础 / Wiki

循环

在条件仍成立时,把同一组步骤重复执行;重复本身被写成规则,而不是抄写许多遍。

它是什么

循环 把重复交给计算机。人可以抄十次加法,但抄一千次既累又容易抄错。循环写清「重复什么、在什么情况下继续、什么时候停」,解释器就按这个规则一遍遍做。规模超出手算之时,正是把判断写成机器可执行形式的理由之一。

Python 常见两种:for 按一个序列逐个取出;while 在条件为真时继续。range 常用来产生一串整数,供 for 使用。循环体要 缩进。

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

count = 3
while count > 0:
    print(count)
    count -= 1

名字从哪来

loop 本义是「圈」。执行到块末再回到块首,像沿一个圈走。早期程序用跳转指令绕回去;后来语言把这种模式写成 for / while,让人一眼看出「这里在重复」,而不必在行号之间来回寻找。break 是中途跳出圈子;continue 是跳过本圈剩下的语句,直接进入下一圈。

循环与 递归 都处理重复,词源却指向不同图景:一个是在同一层路上绕圈,一个是把问题退回给更小的同类问题。

它怎么工作

for 每次从可迭代对象里取出一个元素,赋给循环变量,然后执行块。元素取完,循环正常结束。range(5) 产生 0, 1, 2, 3, 4,右端不包含——这是半开区间的约定,不是「少算了一个」的故障。

while 每次先检查条件。一开始就为假,块一次也不跑;若循环体内不修改让条件变假的量,就会一直转下去,称为死循环。需要提前结束时用 break。它只跳出最内层那一圈。嵌套循环时,外层该不该停,要另外写清楚。空 列表 上的 for 一次也不进入;若后面还假定「至少有一项」,就会在取下标时出错。这是边界,不是循环坏了。

生活里在哪里

广播操重复到音乐停,清点人数从第一个点到最后一个,实验每五分钟读一次温度直到达到目标——都是「同一套动作,结束条件写在规则里」。工业上的批量检测、气象上的逐时记录,把循环从体力劳动里解放出来,同时把「何时停止」变成必须显式写出的科学问题:停早了会漏数据,停晚了会空转。死循环在生活里的对应,是一份没有退出条件的值班表。

和相近概念的差别

循环是「同一层步骤做多遍」。递归 是「函数调用自己去处理更小的同类问题」。画 分形 树时,用递归往往比用手写三层循环更自然;遍历一份名单,用 for 更直白。

选择 决定走哪条路;循环决定这条路走几遍。循环内部几乎总会再写选择,用来处理每一个元素的不同情况。把「对每一个元素做同一件事」写成许多份复制粘贴的代码,既难改,也难证明它们仍然是同一条规则。

常见误会

误会 1:range(5) 会取到 5。

它产生从 0 到 4 的五个整数。右端是开的。

误会 2:while 的条件写反了,会自动停。

条件一直为真,就一直跑。要在体内改变状态,或设好 break。

误会 3:循环会自己跳过空序列,并保证后面仍有一项可用。

空序列上一次也不进入。后续若仍去取「第一项」,那是边界没有写进模型。

想知道更多

  • 书:布鲁克希尔《计算机科学概论》
  • 书:艾伦·唐尼《像计算机科学家一样思考Python(第2版)》
  • 书:埃里克·马瑟斯《Python编程:从入门到实践(第3版)》

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