for 循环与入门级循环不变量
智能体协助练习:先写下自己的预测和实际输出,之后才可以请 AI 智能体解释或审阅,并且必须在证据中记录所受的协助。
先决条件
已完成第 07 天(包括其独立检查)。恢复:第 07 天(值与条件);第 07 天的循环预览是可选的背景知识。
学习目标
逐个码位追踪遍历字符串的 for 循环,并陈述一个在循环前、每次迭代后和结束时都成立的循环不变量,包括空文本和 Unicode 文本的情况。
操作说明
学习来源:在本活动现有的阅读与练习时段内,参考 Automate the Boring Stuff with Python, 3rd edition 的 Chapter 3; Practice Questions; Appendix B answers,用自己的话解释一处与本地任务的联系。保留现有练习与验收检查;若外部资料无法访问,使用课程自写的解释。间隔复习热身(10 分钟): 凭记忆预测 bool("")、bool(" ") 和 "0" == 0,然后核对。有了昨天的复习,这应该很快;答得慢的地方就是需要回顾的地方。
新概念: for 循环对每个元素执行一次循环体;对字符串而言,每个元素是一个 Unicode 码位。循环不变量是关于变量的一句话,它在第一次迭代前成立,并在每次迭代后保持成立。计数时的不变量是:total 等于已访问字符中匹配字符的个数。
1. 运行前,按 visited / total / 不变量是否成立 三列填写追踪表。
2. 运行代码;它会打印同样的列,方便你核对表格。
3. 运行第二段代码,观察空文本的情况(循环体执行零次)以及一个与码位有关的意外结果。
text = "été"
target = "é"
total = 0
visited = ""
for ch in text:
if ch == target:
total += 1
visited += ch
print(repr(visited), total, total == visited.count(target))
print("final", total, visited == text)
text = ""
total = 0
for ch in text:
total += 1
print("final", total)
print(len("é"), len("e\u0301"), "é" == "e\u0301")
练习与预测记录
运行前写出 text = "été"、target = "é" 的完整追踪表。然后陈述三个时刻的不变量:循环前(total = 0,尚未访问任何字符)、每次迭代后、结束时(visited == text,所以 total 就是答案)。最后预测空字符串的输出以及 len("e\u0301")。
循环前什么都没访问,total 为 0,所以不变量已经成立。每次迭代给 visited 增加一个字符,只有该字符匹配时 total 才加 1,所以不变量继续成立。用一个码位(U+00E9)写成的 "é" 与 "e" 后接组合重音符(U+0301)不同,后者是两个码位。
第一段代码的输出:
'é' 1 True
'ét' 1 True
'été' 2 True
final 2 True
完整追踪:开始时 visited = "",total = 0(空串中没有匹配,不变量为真)。第 1 步:ch = "é" 匹配,total = 1,visited = "é"。第 2 步:ch = "t" 不匹配,total 仍为 1,visited = "ét"。第 3 步:ch = "é" 匹配,total = 2,visited = "été"。结束时 visited 等于 text,所以由不变量可知 total 是整个文本中的匹配数:2。
第二段代码的输出:
final 0
1 2 False
文本为空时循环体从不执行,total 保持 0,结束时不变量依然成立。Python 统计的是码位,所以 len("e\u0301") 为 2,这种分解形式与单个码位的 "é" 不相等。
追踪表在运行前写好且与实际各行一致;陈述了初始化、每次迭代后和结束时的不变量;正确预测了空文本情况和两个码位的分解形式情况。
来源资源与出处
Automate the Boring Stuff with Python, 3rd edition
对应章节 / 时间戳: Chapter 3; Practice Questions; Appendix B answers
验证版本与日期: Public edition checked 2026-11-01; moving pages may change
Beginner teaching and answer-keyed practice before checking exact semantics in the Python reference; selected chapters only, not the book's entire automation stack.
No prior programming required for Chapter 1; later chapters assume its basic Python concepts.
Use the original localized explanations, exercises and checks already present in this activity; no external account or purchase is required for that fallback.
对比候选资源与选型分析 (2)
Guided Python syntax but assumes programming familiarity; paired with the beginner text rather than used as its replacement.
Lectures and problem sets teach a broader CS1 course; the book offers shorter text-first entry and an answer appendix.
The Python Tutorial: More Control Flow Tools
对应章节 / 时间戳: 第 4.2–4.10 节(for、range、定义函数)
验证版本与日期: Python 3.12 文档(核验日期:2026-10-30)
用于查阅 Python 迭代、函数和容器的第一手参考资料。
第 01–06 天的 Python 表达式与文件系统基础
教材内已讲解所有必需的行为,可以离线完成。
对比候选资源与选型分析 (2)
在语法层面定义相同的结构;选择教程章节是因为它循序渐进。
以讲座节奏讲解相同的控制流;由于本课程已通过终端练习推进这些概念,暂不采用。