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)
在語法層面定義相同的結構;選擇教學章節是因為它循序漸進。
以講座節奏講解相同的控制流程;由於本課程已透過終端機練習推進這些概念,暫不採用。