列表與字典:有序元素與鍵值計數
代理協助練習:先寫下自己的預測和實際輸出,之後才可以請 AI 代理解釋或審閱,並且必須在證據中記錄所受的協助。
先決條件
已完成第 08 天(包括其獨立檢查)。復原:第 08 天(迴圈與不變量)、第 07 天活動 1(修改與重新綁定);第 07 天是本單元的複習日。
學習目標
建立並更新列表和字典,檢查成員關係,用 get 安全讀取不存在的鍵,並預測兩個名稱指向同一列表時的別名效果,包括空和 Unicode 的情況。
操作說明
學習來源:在本活動現有的閱讀與練習時段內,參考 Automate the Boring Stuff with Python, 3rd edition 的 Chapter 6; Practice Questions; Appendix B answers,用自己的話解釋一處與本地任務的聯繫。保留現有練習與驗收檢查;若外部資料無法存取,使用課程自寫的解釋。間隔複習暖身: 憑記憶說出第 08 天的計數不變量,並解釋為什麼 a = [1]; b = a; a.append(2) 會改變 b。今天你會在列表上看到同樣的別名現象。
新概念: list(text) 回傳由碼位組成的列表。列表保持元素順序,append 在尾端加入。字典把鍵對應到值;d[key] = value 用於新增或取代,key in d 檢查鍵是否存在,d.get(key, 0) 在鍵不存在時回傳 0 而不是報錯。字典會記住插入順序。
先預測印出的每一行,再執行:
chars = list("ñu猫")
print(chars, len(chars))
print(len("n\u0303u"), "n\u0303u" == "ñu")
seen = []
for ch in "abca":
if ch not in seen:
seen.append(ch)
print(seen)
ages = {}
ages["猫"] = 3
ages["犬"] = 5
ages["猫"] = ages["猫"] + 1
print(ages, len(ages), "猫" in ages, ages.get("鳥", 0))
alias = seen
alias.append("z")
print(seen)
print(list(""), {})
練習與預測紀錄
寫下全部六行輸出的預測,再記錄實際輸出。解釋為什麼 len("n\u0303u") 為 3、為什麼 seen 只保留每個字元的第一次出現,以及為什麼透過 alias 追加也會改變 seen。
這裡的 "ñ" 是一個碼位;"n" 後接組合波浪符(U+0303)是兩個碼位。"鳥" 不是鍵,所以 ages.get("鳥", 0) 回傳 0。alias = seen 不會複製列表;兩個名稱指向同一個列表物件(第 05 天)。
確切輸出:
['ñ', 'u', '猫'] 3
3 False
['a', 'b', 'c']
{'猫': 4, '犬': 5} 2 True 0
['a', 'b', 'c', 'z']
[] {}
list("ñu猫") 有三個碼位。分解形式的 "n\u0303u" 有三個碼位,不等於兩個碼位的 "ñu"。迴圈只在字元尚未出現在 seen 中時才追加,所以結果是 ["a", "b", "c"]。給已存在的鍵賦值會取代其值,所以 "猫" 變為 4,字典仍然只有兩個鍵。alias 和 seen 是同一個列表,所以 "z" 出現在 seen 中。空字串得到空列表,{} 是空字典。
六行都在執行前預測並逐一解釋不符;能解釋帶預設值的 get、插入順序、分解字元的長度以及列表別名。
來源資源與出處
Automate the Boring Stuff with Python, 3rd edition
對應章節 / 時間戳: Chapter 6; 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、定義函式);資料結構見同一教學第 5 章
驗證版本與日期: Python 3.12 文件(核驗日期:2026-10-30)
用於查閱 Python 迭代、函式和容器的第一手參考資料。
第 01–06 天的 Python 運算式與檔案系統基礎
教材內已說明所有必需的行為,可以離線完成。
對比候選資源與選型分析 (2)
在語法層面定義相同的結構;選擇教學章節是因為它循序漸進。
以講座節奏講解相同的控制流程;由於本課程已透過終端機練習推進這些概念,暫不採用。