agentmentoragentmentor

第 04 节:重复执行,但别失控

本节 objectives:

  • for 遍历一组已有值
  • while 表达“不满足前一直做”
  • 判断什么时候循环该停止

先修:变量、条件、列表的粗略直觉 | 上一节 << 03 | 下一节 05 >>

复制粘贴三遍,通常是在提醒你该循环了

如果你写了三行几乎一样的 print(),程序已经在暗示:这里有重复结构。Python 的 for 常用于遍历序列或 range() 生成的一串数;while 则在条件为真时持续执行1

循环不是为了炫技,而是为了让“对每个东西做同一件事”变得清楚。

讲解

for 适合已知集合。 for name in names: 的意思是:从 names 里依次取出一个值,临时命名为 name,执行缩进块。

range() 适合计数。 range(3) 产生 0、1、2 这样的整数序列,常用来重复固定次数1

while 适合等条件变化。 例如“只要余额还不够,继续存钱”。写 while 时必须能说清停止条件,否则会变成无限循环。

break 可以提前退出。 当你已经找到目标,不必继续循环剩余数据。Python 控制流文档把 breakcontinue 作为循环控制工具介绍1

跟我做一遍(worked example)

统计三个任务里完成了几个:

python
tasks = ["read", "write", "review"]done = ["read", "review"]count = 0
for task in tasks:    if task in done:        count = count + 1
print("done:", count)

循环每次只看一个任务。count 是累加器:从 0 开始,每发现一个完成项就加 1。这样比手写三次判断更容易扩展到十个任务。

换你补全(faded example)

补全循环,输出 1 到 3:

python
number = 1
while number <= ____:    print(number)    number = number + ____

答案:

python
number = 1
while number <= 3:    print(number)    number = number + 1

关键判断点是最后一行:如果忘了让 number 变化,条件会一直为真。

小结 + 通向下一节

循环把重复压成结构。下一节把一段有名字的结构抽出来,让你能在不同地方重复调用它。

Footnotes

  1. Python Tutorial: More Control Flow Tools — https://docs.python.org/3/tutorial/controlflow.html 2 3

练习

Level 1: 给名字列表逐个打招呼。

  • 做法:创建三个名字组成的列表,用 for 输出 Hello, <name>
提示 1

先写 names = ["Ada", "Lin", "Sam"]。 Level 2: 找第一个长单词。

  • 做法:遍历单词列表,找到第一个长度大于 5 的词就打印并 break
提示 2

字符串可以用 len(word) 取长度。

看参考答案

break 表达“目标已找到,停止搜索”。

自评