3.6知识点 · 课时
循环结构:让程序会重复
掌握 for 循环和 while 循环,让程序能重复执行,批量处理数据。
让程序会重复:循环结构
上一关的程序能批改一道题了。但一张试卷有 10 道题,难道要写 10 遍 if?当然不用——循环结构让程序自动重复执行。
for 循环:遍历已知的数据
最常用的场景:遍历列表的每个元素:
answers = ["A", "C", "B", "D", "A"]
for a in answers:
print(a)
输出:
A
C
B
D
A
for a in answers 的意思是:把 answers 列表里的元素逐个取出,每次赋值给 a,执行缩进的代码。
for 循环 + 累加:统计总分
循环最常见的用法是累加——把多次结果汇总:
standard = ["A", "C", "B", "D", "A"]
student = ["A", "B", "B", "D", "C"]
total = 0 # 先准备一个累加器
for i in range(5): # i 从 0 到 4
if student[i] == standard[i]:
total = total + 2 # 答对加 2 分
print("总分:", total)
range(5)生成 0, 1, 2, 3, 4total = total + 2是累加:把 total 加 2 后重新赋值给 total
range():生成数字序列
range(5) # 0, 1, 2, 3, 4
range(1, 6) # 1, 2, 3, 4, 5
range(0, 10, 2) # 0, 2, 4, 6, 8(步长 2)
while 循环:满足条件就继续
while 适合不确定重复次数的场景:
count = 0
while count < 3:
print("第", count + 1, "次")
count = count + 1
输出"第 1 次""第 2 次""第 3 次",然后 count 变成 3,条件 count < 3 为 False,循环结束。
⚠️ while 循环必须有改变条件的操作(如
count = count + 1),否则会死循环——永远停不下来!
for vs while
| for | while | |
|---|---|---|
| 适合 | 已知次数(遍历列表、range) | 未知次数(满足条件就继续) |
| 例子 | 批改 5 道题 | 反复让学生输入,直到输对 |
break 和 continue
| 语句 | 作用 |
|---|---|
break | 立即结束整个循环 |
continue | 跳过本次,继续下一次循环 |
for i in range(10):
if i == 5:
break # 到 5 就停,不继续了
print(i) # 输出 0,1,2,3,4
📱 项目推进·第 6 关
用循环让「自动批改助手」批改整张试卷:
# 自动批改助手 v0.3:循环批改版
standard = ["A", "C", "B", "D", "A"]
student = ["A", "B", "B", "D", "C"]
total = 0
for i in range(5):
if student[i] == standard[i]:
total = total + 2
print(f"第{i+1}题:✅ 正确")
else:
print(f"第{i+1}题:❌ 错误(正确:{standard[i]})")
print("———")
print("总分:", total, "/", len(standard) * 2)
现在程序能批改 5 道题了!最后一关,我们把它做成完整的成品。
f"第{i+1}题"是 f-string(格式化字符串),花括号{}里可以放变量,自动替换成值。非常实用!
🤔 思考
- 如果忘了写
total = total + 2,总分会是多少?为什么? - 用 while 循环改写上面的 for 循环,怎么写?
range(1, 10)生成的数字从几到几?
📝 知识小结
- 循环结构:让代码重复执行
for x in 列表:遍历每个元素;for i in range(n):按次数循环while 条件:满足条件就继续(注意避免死循环)- 累加:用
total = total + n汇总多次结果 break跳出循环,continue跳过本次f"...{变量}...":f-string 格式化字符串
随堂练习
检验一下你对本节内容的理解
下面代码运行后,total 的值是多少?
total = 0
for i in range(4):
total = total + i
print(total)