07 / 90

Day 07:每週複習——值、條件與安全的 Git

低新內容的複習日:用新的輸入憑記憶提取第 04–06 天的內容(值與綁定、比較與明確條件、小差異與提交),最後獨立自我檢查。唯一的新內容是一個有鷹架的指令(git restore),以及第 08 天 for 迴圈的簡短預覽(不計評量)。提取練習、複習與獨立檢查共同填滿 480 分鐘的學習台帳。

自主學習與 Python 480 分鐘(8 小時專注學習)
01 120 分鐘

闔上筆記提取:值與綁定(第 04–05 天)

代理協助練習:先寫下自己的預測和實際輸出,之後才可以請 AI 代理解釋或審閱,並且必須在證據中記錄所受的協助。

先決條件

已完成第 06 天(包括其獨立檢查)。如果卡住,先回到第 06 天;關於值與綁定,複習第 04–05 天。

學習目標

憑記憶回想 repr、type 和 bool 如何描述一個值,以及重新綁定與修改(變異)有何不同,然後用從未見過的輸入(包括空字串與 Unicode 文字)在 Python 中驗證。

操作說明

間隔複習: 第 04–05 天是兩三天前的內容,所以今天先提取、再重讀。先從記憶中把知識取出來再核對,比重讀筆記記得更牢。本活動沒有新內容。

1. 闔上筆記。對第一段程式碼中的每個值,寫下你預期的三欄:repr、型別名稱和 bool。也預測最後一行(len 計算的是 Unicode 碼位數,而不是位元組數)。
2. 執行程式碼,標出所有與預測不符的行。
3. 對綁定程式碼同樣先預測兩行,再執行。
4. 對每一處不符,用一句話寫出你忘記的規則,以及教授它的那一天(值見第 04 天,變異與同一性見第 05 天)。

def show(value):
    print(repr(value), type(value).__name__, bool(value))
show(0.0)
show("0.0")
show("")
show("猫")
show([""])
show(None)
print(len("猫"), len("café"))
a = ["猫"]
b = a
a.append("犬")
print(b, a is b)
c = ["猫"]
d = c
c = c + ["犬"]
print(d, c is d)

練習與預測紀錄

製作預測表:每個值一行(0.0、"0.0"、""、"猫"、[""]、None),欄位為 repr / type / bool,並加上對 len("猫") 和 len("café") 的預測。接著預測綁定程式碼印出的兩行,並說明哪個名稱所指的物件被修改、哪個名稱被重新綁定。

獨立掌握標準

預測在執行前寫好,涵蓋全部六個值、兩個 len 結果和綁定程式碼的兩行;每一處不符都有一句規則和一個復原日(第 04 天或第 05 天)。

來源資源與出處

linking PSF License Version 2

The Python Tutorial: More Control Flow Tools

作者 / 機構: Python Software Foundation | 原始出處連結 ↗

對應章節 / 時間戳: 第 4.2–4.10 節(for、range、定義函式);資料結構見同一教學第 5 章

驗證版本與日期: Python 3.12 文件(核驗日期:2026-10-30)

入選理由:

用於查閱 Python 迭代、函式和容器的第一手參考資料。

來源前置條件:

第 01–06 天的 Python 運算式與檔案系統基礎

安全回退方案(離線彈性):

教材內已說明所有必需的行為,可以離線完成。

對比候選資源與選型分析 (2)
The Python Language Reference: Compound statements ↗ compared_alternative [PSF License Version 2]

在語法層面定義相同的結構;選擇教學章節是因為它循序漸進。

以講座節奏講解相同的控制流程;由於本課程已透過終端機練習推進這些概念,暫不採用。

02 120 分鐘

提取練習:比較與明確條件(第 05–06 天)

代理協助練習:先寫下自己的預測和實際輸出,之後才可以請 AI 代理解釋或審閱,並且必須在證據中記錄所受的協助。

先決條件

今天的活動 1。如果對比較感到陌生,複習第 05 天;條件與輸入正規化請複習第 06 天。

學習目標

回想 == 與 is 的差別,並憑記憶重寫一個第 06 天風格的分類函式,用明確條件處理空輸入、純空白輸入、十進位數字和 Unicode 數字。

操作說明

間隔複習: 本活動用新輸入複習第 05 天(比較)和第 06 天(條件),所以無法依賴記住的答案。

1. 預測比較這一行印出的五個布林值,然後執行。
2. 不看第 06 天,寫出 label(raw):先 strip;結果為空字串時回傳 "missing";strip 後的文字是十進位數字時回傳 "number " 加上整數值;否則回傳 "text " 加上 strip 後的文字。執行自己的版本之前先預測六行輸出。
3. 將你的函式與下面的參考實作比較,並執行兩者。

print(0 == 0.0, "0" == 0, None is None, [] == [], [] is [])
def label(raw):
    text = raw.strip()
    if text == "":
        return "missing"
    if text.isdecimal():
        return "number " + str(int(text))
    return "text " + text
print(label("  猫 "))
print(label(""))
print(label("   "))
print(label("007"))
print(label("-3"))
print(label("٣"))

第 08 天預覽(不計評量,有鷹架): 執行下面的迴圈,只需觀察迴圈主體對每個字元執行一次。明天會正式學習迴圈。

for ch in "猫a":
    print(ch, ch == "a")

練習與預測紀錄

寫下五個比較的預測和你自己的 label(raw),再預測 " 猫 "、""、" "、"007"、"-3" 和 "٣"(阿拉伯-印度數字 3)的六個輸出。執行後解釋 "٣" 出乎意料的結果。

獨立掌握標準

五個比較預測和六個 label 預測都在執行前寫好;你自己的 label(raw) 完全重現參考輸出;能解釋為什麼 " " 是 missing、為什麼 "٣" 是數字。

來源資源與出處

linking PSF License Version 2

The Python Tutorial: More Control Flow Tools

作者 / 機構: Python Software Foundation | 原始出處連結 ↗

對應章節 / 時間戳: 第 4.2–4.10 節(for、range、定義函式);資料結構見同一教學第 5 章

驗證版本與日期: Python 3.12 文件(核驗日期:2026-10-30)

入選理由:

用於查閱 Python 迭代、函式和容器的第一手參考資料。

來源前置條件:

第 01–06 天的 Python 運算式與檔案系統基礎

安全回退方案(離線彈性):

教材內已說明所有必需的行為,可以離線完成。

對比候選資源與選型分析 (2)
The Python Language Reference: Compound statements ↗ compared_alternative [PSF License Version 2]

在語法層面定義相同的結構;選擇教學章節是因為它循序漸進。

以講座節奏講解相同的控制流程;由於本課程已透過終端機練習推進這些概念,暫不採用。

03 120 分鐘

安全 Git 複習:檢查、校驗、提交並復原未提交的修改

代理協助練習:先寫下自己的預測和實際輸出,之後才可以請 AI 代理解釋或審閱,並且必須在證據中記錄所受的協助。

先決條件

今天的活動 1–2;已安裝 Git。如果對 git diff 或小提交感到陌生,複習第 04 天活動 3 和第 06 天活動 3。

學習目標

在拋棄式儲存庫中複習第 04–06 天的安全修改流程(diff、diff --check、小提交、log),並用一個有鷹架的新指令 git restore 捨棄未提交的修改,再驗證結果。

操作說明

間隔複習: 提交前檢查差異已在第 04 天和第 06 天練習過;今天在新的練習儲存庫中憑記憶重複一遍。今天的新內容(有鷹架): git restore FILE 預設從索引(暫存區)還原工作目錄中的已追蹤檔案;它不改變索引,也不取消暫存的修改。在本練習儲存庫中,索引與 HEAD(最新提交)相同,因此捨棄未暫存的修改後會還原為該已提交版本。它不能撤銷提交;那是第 09 天的內容。

只在新的暫存目錄中操作,絕不在課程儲存庫中操作。每個指令之前先寫下你預期的輸出(「沒有輸出」也算一種預測)。然後執行整個序列:

cd "$(mktemp -d)"
git init -q
git config user.name "Learner"
git config user.email "[email protected]"
printf 'label: 猫\n' > notes.txt
git add notes.txt
git commit -q -m "Add notes"
printf 'label: 猫\ncount: 1\n' > notes.txt
git diff --stat
git diff --check
git add notes.txt
git commit -q -m "Add count line"
git log --format=%s
printf 'oops\n' >> notes.txt
git status --short
git restore notes.txt
git status --short
cat notes.txt

練習與預測紀錄

先預測 git diff --stat、git diff --check、git log --format=%s 以及兩次 git status --short 的輸出,再執行序列並記錄實際輸出。最後寫出 git restore 之後的檔案內容,並解釋含 Unicode 的那一行 "label: 猫" 為什麼保留了下來。

獨立掌握標準

執行前記錄了預測;實際輸出與參考輸出完全一致;能說明 git restore 適用的情況(已追蹤檔案上未提交的修改),並說明它不能撤銷提交。

來源資源與出處

linking PSF License Version 2

The Python Tutorial: More Control Flow Tools

作者 / 機構: Python Software Foundation | 原始出處連結 ↗

對應章節 / 時間戳: 第 4.2–4.10 節(for、range、定義函式);資料結構見同一教學第 5 章

驗證版本與日期: Python 3.12 文件(核驗日期:2026-10-30)

入選理由:

用於查閱 Python 迭代、函式和容器的第一手參考資料。

來源前置條件:

第 01–06 天的 Python 運算式與檔案系統基礎

安全回退方案(離線彈性):

教材內已說明所有必需的行為,可以離線完成。

對比候選資源與選型分析 (2)
The Python Language Reference: Compound statements ↗ compared_alternative [PSF License Version 2]

在語法層面定義相同的結構;選擇教學章節是因為它循序漸進。

以講座節奏講解相同的控制流程;由於本課程已透過終端機練習推進這些概念,暫不採用。

04 120 分鐘

每週獨立檢查:第 04–06 天

獨立掌握檢查:提交證據之前不使用任何 AI 協助,也不查看參考答案;如實申報所受的協助。

先決條件

已完成今天的活動 1–3 並記錄證據。復原連結:第 04 天(值)、第 05 天(綁定與比較)、第 06 天(條件與安全 Git)。

學習目標

在無協助的情況下預測值、綁定和比較的結果,從零實作一個使用明確條件的小函式,並憑記憶寫出安全檢查指令。

操作說明

間隔複習: 這是第 04–06 天的每週鞏固檢查。提交證據之前,不要打開參考答案,也不要使用 AI。

1. 先書面預測這段程式碼印出的三行,再執行:

print(repr("0"), bool("0"), "0" == 0)
x = ["a"]
y = x
x.append("é")
print(y)
x = ["a"]
y = x
x = x + ["é"]
print(y)

2. 從零寫出 describe(raw):strip 後為空時回傳 "empty",是十進位數字時回傳 "digits",否則回傳 "text"。先預測,再用 ""、" "、"42"、"42"(全形數字)和 "猫" 測試。
3. 憑記憶列出:在拋棄式儲存庫中提交前檢查修改要執行的指令,以及捨棄已追蹤檔案上未提交修改的指令。

練習與預測紀錄

提交:三行程式碼的預測和實際輸出;describe(raw) 的程式碼及五個預測、五個實測結果;安全檢查與復原的指令清單;如有不符,寫出你要回顧的復原日。

獨立掌握標準

無協助:三行預測先寫好;describe(raw) 通過全部五個測試案例(包括空、純空白和全形 Unicode 數字);指令清單正確;每一處不符都寫明復原日。

來源資源與出處

linking PSF License Version 2

The Python Tutorial: More Control Flow Tools

作者 / 機構: Python Software Foundation | 原始出處連結 ↗

對應章節 / 時間戳: 第 4.2–4.10 節(for、range、定義函式);資料結構見同一教學第 5 章

驗證版本與日期: Python 3.12 文件(核驗日期:2026-10-30)

入選理由:

用於查閱 Python 迭代、函式和容器的第一手參考資料。

來源前置條件:

第 01–06 天的 Python 運算式與檔案系統基礎

安全回退方案(離線彈性):

教材內已說明所有必需的行為,可以離線完成。

對比候選資源與選型分析 (2)
The Python Language Reference: Compound statements ↗ compared_alternative [PSF License Version 2]

在語法層面定義相同的結構;選擇教學章節是因為它循序漸進。

以講座節奏講解相同的控制流程;由於本課程已透過終端機練習推進這些概念,暫不採用。