06 / 90

Day 06: 真值與文字/資料分支

撰寫並測試能處理正常、空白與容易誤導的文字/資料輸入的分支,同時以安全的 Git diff 與提交保留證據。

自學方法與 Python 工程基礎 480 分鐘(8 小時專注學習)
01 120 分鐘

真實輸入的真值表

獨立掌握檢查(不使用 AI 輔助)。

前置要求

已完成 Day 05 的比較檢查;能用 python3 執行 Python 檔案並讀懂其輸出。

學習目標

預測並驗證空值、零與空白輸入的 bool() 結果,並解釋為什麼 `if value:` 分支可能把真實資料判斷錯誤。

操作指引

必做:在執行任何程式之前,針對 []、[0]、""、" "、0、"0" 逐一寫下你對 bool(value) 以及分支 presence(value)(值為真時回傳 "present",否則回傳 "missing")結果的預測。接著執行程式,原樣複製輸出,並標出所有與預測不符的列。

複盤:每處不符都用一句話寫出規則:空容器與數值零為假;任何非空字串(包括 " " 和 "0")都為真。

選做:只有在必做證據完整之後,才把 None 和 [[]] 加入串列,先預測再執行。

自主實作與記錄

建立 truthiness.py,定義 presence(value)(value 為真時回傳 "present",否則回傳 "missing"),並依 []、[0]、""、" "、0、"0" 的順序,把每個值的 repr(value)、bool(value) 與 presence(value) 印在同一行。

客觀知識測驗與診斷追蹤

請回答以下題目檢驗掌握情況。提交前請誠實聲明你的輔助條件。

聲明輔助條件

說明:無 AI 輔助屬於誠實聲明條件,非平台監控或強制檢測手段。

1.

在真值表中,哪個輸入雖然不含任何可見資料,卻為真,因而被 presence(value) 回報為 "present"?

作答應證與歷史記錄

    活動掌握標準

    在不使用 AI 輔助的情況下,於執行前寫下全部 6 個輸入的預測,實際輸出與參考解答完全一致,並能正確解釋兩列誤導性結果(`" "` 被判為 present,`0` 被判為 missing)。必做與選做內容分開,證據中註明為獨立完成。

    權威來源資源與權利證明

    linking PSF License Version 2

    Python Standard Library: Built-in Types

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

    對應章節 / 時間戳: 「真值測試」、「比較」和「可變序列型別」各節

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

    入選理由:

    用於查閱真值、比較、繫結和物件修改行為的規範性參考資料。

    來源前置條件:

    Day 03 復原演練

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

    執行教材中提供的 Python 範例,並查閱已安裝直譯器的說明。

    對比候選資源與選型分析 (2)
    Python Data Model reference ↗ compared_alternative [PSF License Version 2]

    這份參考資料更深入地說明物件語義,超出了運算式層面練習所需的範圍;stdtypes 能將內容限定在運算子層面。

    The Python Tutorial: An Informal Introduction ↗ compared_alternative [PSF License Version 2]

    以敘述方式介紹相同的運算子;函式庫參考文件則被選為查閱規範簽章的資料。

    linking CC BY-NC-SA 3.0 (book) noncommercial share-alike

    Git User Manual: Recording Changes

    作者 / 機構: Git project | 原始出處連結 ↗

    對應章節 / 時間戳: 將變更記錄到儲存庫

    驗證版本與日期: 核驗日期:2026-10-30

    入選理由:

    用於在安全提交前檢查小範圍差異的第一手參考資料。

    來源前置條件:

    Git 基礎知識

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

    在本機使用 git diff 和 git status;理解差異之後再提交。

    對比候選資源與選型分析 (2)
    git-diff command reference ↗ compared_alternative [Git documentation (GPL-2.0)]

    提供命令層級的選項參考;選擇 Pro Git 章節,是因為它逐步說明了如何在提交前檢查變更。

    Atlassian Git tutorials: git diff ↗ compared_alternative [All Rights Reserved]

    容易理解的商業教學;對於同樣的檢查習慣,書籍章節更深入地解釋了暫存與索引的語義。

    02 120 分鐘

    明確條件與輸入正規化

    獨立掌握檢查(不使用 AI 輔助)。

    前置要求

    已完成 Activity 01 的真值表;了解 `str.strip()` 與 `int()` 的作用。

    學習目標

    依照一份精確的規約實作 classify(raw):文字只正規化一次,只轉換經過驗證的數字文字,從而絕不混淆 missing、zero、positive 與 invalid。

    操作指引

    必做:閱讀練習中的規約。在執行任何程式之前,寫出參考表中 16 個輸入各自的預期回傳值(至少包括 " 7 "、""、"0" 和 "unknown")。實作 classify(raw),對全部輸入執行,原樣記錄輸出,並與預測逐行比較。

    複盤:每處不符都要指出違反了哪條規約,修正程式並重新執行,直到輸出完全一致。

    選做:只有在必做證據完整之後,才加入一個你自己的輸入(例如阿拉伯-印度數字三 "٣"),先依規約預測結果,再執行。

    自主實作與記錄

    撰寫嚴格遵守以下規約的 classify(raw):
    - 輸入:raw 一律是 str。其他型別不在規約範圍內(例如 classify(None) 會拋出 AttributeError)。
    - 只正規化一次:text = raw.strip()。它會移除前後各種空白(空格、定位字元、換行、全形空格 U+3000),中間的空格保留。
    - 若 text == "",回傳 "missing"。
    - 若 text 只由 ASCII 數字 0-9 組成(text.isascii() and text.isdigit()),以 int(text) 轉換:數值為 0 時回傳 "zero"(因此 "00" 是 zero),否則回傳 "positive"(因此 "007" 是 positive)。
    - 其他一切都回傳 "invalid":任意大小寫的字母("unknown"、"Zero")、正負號("-3"、"+7")、小數點("3.5")、底線("1_000")、中間的空格("1 2")以及非 ASCII 數字("7")。invalid 文字絕不會被當作零。
    - 回傳值恰好是四個小寫字串 "missing"、"zero"、"positive"、"invalid" 之一。
    每個輸入依 f"{raw!r:12} -> {classify(raw)}" 的格式印出一行,使輸出穩定且空白可見。
    需要預測並執行的 16 個輸入(依此順序;"\t\n" 是定位字元加換行字元,"\u30007" 是全形空格 U+3000 後接 7):" 7 ", "", "0", "unknown", " ", "\t\n", "\u30007", "007", "00", "Zero", "-3", "+7", "3.5", "1_000", "1 2", "7"。

    客觀知識測驗與診斷追蹤

    請回答以下題目檢驗掌握情況。提交前請誠實聲明你的輔助條件。

    聲明輔助條件

    說明:無 AI 輔助屬於誠實聲明條件,非平台監控或強制檢測手段。

    1.

    依照 Day 06 的規約,classify(" 0\t") 回傳什麼?

    作答應證與歷史記錄

      活動掌握標準

      在不使用 AI 輔助的情況下,於執行前寫下 16 個輸入的預測,classify 的輸出與參考表完全一致,並能用一句話說明轉換規則。必做與選做內容分開,證據中註明為獨立完成。

      權威來源資源與權利證明

      linking PSF License Version 2

      Python Standard Library: Built-in Types

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

      對應章節 / 時間戳: 「真值測試」、「比較」和「可變序列型別」各節

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

      入選理由:

      用於查閱真值、比較、繫結和物件修改行為的規範性參考資料。

      來源前置條件:

      Day 03 復原演練

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

      執行教材中提供的 Python 範例,並查閱已安裝直譯器的說明。

      對比候選資源與選型分析 (2)
      Python Data Model reference ↗ compared_alternative [PSF License Version 2]

      這份參考資料更深入地說明物件語義,超出了運算式層面練習所需的範圍;stdtypes 能將內容限定在運算子層面。

      The Python Tutorial: An Informal Introduction ↗ compared_alternative [PSF License Version 2]

      以敘述方式介紹相同的運算子;函式庫參考文件則被選為查閱規範簽章的資料。

      linking CC BY-NC-SA 3.0 (book) noncommercial share-alike

      Git User Manual: Recording Changes

      作者 / 機構: Git project | 原始出處連結 ↗

      對應章節 / 時間戳: 將變更記錄到儲存庫

      驗證版本與日期: 核驗日期:2026-10-30

      入選理由:

      用於在安全提交前檢查小範圍差異的第一手參考資料。

      來源前置條件:

      Git 基礎知識

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

      在本機使用 git diff 和 git status;理解差異之後再提交。

      對比候選資源與選型分析 (2)
      git-diff command reference ↗ compared_alternative [Git documentation (GPL-2.0)]

      提供命令層級的選項參考;選擇 Pro Git 章節,是因為它逐步說明了如何在提交前檢查變更。

      Atlassian Git tutorials: git diff ↗ compared_alternative [All Rights Reserved]

      容易理解的商業教學;對於同樣的檢查習慣,書籍章節更深入地解釋了暫存與索引的語義。

      03 120 分鐘

      安全 diff 與提交演練

      Agent 輔助工程檢查:須宣告授予的權限與審查範圍;Agent 的輸出不能作為獨立掌握的證據。

      前置要求

      已完成 Activity 02 的規約與參考實作 classify;終端機中可以使用 Git 與 python3;有一個可以接受唯讀、限定範圍審查請求的 AI 程式設計 Agent。

      學習目標

      在詢問 Agent 之前先寫好預期輸出,然後在拋棄式 Git 儲存庫中審查修正提案:對照預期輸出測試,以 git diff --check 檢查 diff,只提交經過審查的檔案。

      操作指引

      必做:只在以 mktemp -d 新建的拋棄式儲存庫中操作,絕不在真實專案中進行。(1) 在詢問任何 Agent 之前,把你自己對 6 個輸入的預期輸出寫入 expected.txt。(2) 提交有缺陷的基線 classify.py,執行它,並以 diff 記錄不一致之處。(3) 以類似下面的請求向 Agent 申請限定範圍的審查:「只對照下方的規約審查 classify.py。不要執行指令、修改檔案或提交。請提出替換方案,並列出這 6 個輸入中結果會改變的項目。」記錄 Agent 名稱、你授予的權限(唯讀、一個檔案)及其回覆。(4) 套用替換方案,檢查 git diff,重新執行測試案例,執行 git diff --check,然後只提交 classify.py。參考解答提供了一套完整可重現的步驟,以 Activity 02 的實作作為提案。

      複盤:每個指令執行前寫下預測,原樣記錄輸出,並解釋預期與實際輸出之間的每一處差異。

      選做:只有在必做證據完整之後,才在已提交的 classify.py 的某一行末尾加一個空格,觀察 git diff --check 的回報,再以 git restore classify.py 復原。

      自主實作與記錄

      在拋棄式儲存庫中,依照 Activity 02 的規約記錄你對 " 7 "、""、"0"、"unknown"、" " 和 " 0 " 的預期輸出(列印格式為 f"{raw!r} -> {classify(raw)}")。提交基線,以 git diff 審查 Agent 提出的修正,以 diff expected.txt actual.txt 和 git diff --check 驗證,然後只提交 classify.py,讓 expected.txt 和 actual.txt 維持未追蹤狀態。

      客觀知識測驗與診斷追蹤

      請回答以下題目檢驗掌握情況。提交前請誠實聲明你的輔助條件。

      聲明輔助條件

      說明:無 AI 輔助屬於誠實聲明條件,非平台監控或強制檢測手段。

      1.

      你的輸出與 expected.txt 一致,git diff --check 沒有任何輸出。git status --short 顯示 M classify.py、?? actual.txt 和 ?? expected.txt。哪個指令只暫存經過審查的檔案?

      作答應證與歷史記錄

        活動掌握標準

        expected.txt 在向 Agent 提出請求之前就已寫好;證據顯示基線的不一致、經過檢查的 diff、`diff exit: 0`、`check exit: 0`,以及一個只含 classify.py 的提交,同時 expected.txt 和 actual.txt 維持未追蹤。Agent 請求、授予的權限(唯讀、一個檔案)與回覆均已記錄,並標記為 Agent 輔助而非獨立證據。必做與選做內容分開。

        權威來源資源與權利證明

        linking PSF License Version 2

        Python Standard Library: Built-in Types

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

        對應章節 / 時間戳: 「真值測試」、「比較」和「可變序列型別」各節

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

        入選理由:

        用於查閱真值、比較、繫結和物件修改行為的規範性參考資料。

        來源前置條件:

        Day 03 復原演練

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

        執行教材中提供的 Python 範例,並查閱已安裝直譯器的說明。

        對比候選資源與選型分析 (2)
        Python Data Model reference ↗ compared_alternative [PSF License Version 2]

        這份參考資料更深入地說明物件語義,超出了運算式層面練習所需的範圍;stdtypes 能將內容限定在運算子層面。

        The Python Tutorial: An Informal Introduction ↗ compared_alternative [PSF License Version 2]

        以敘述方式介紹相同的運算子;函式庫參考文件則被選為查閱規範簽章的資料。

        linking CC BY-NC-SA 3.0 (book) noncommercial share-alike

        Git User Manual: Recording Changes

        作者 / 機構: Git project | 原始出處連結 ↗

        對應章節 / 時間戳: 將變更記錄到儲存庫

        驗證版本與日期: 核驗日期:2026-10-30

        入選理由:

        用於在安全提交前檢查小範圍差異的第一手參考資料。

        來源前置條件:

        Git 基礎知識

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

        在本機使用 git diff 和 git status;理解差異之後再提交。

        對比候選資源與選型分析 (2)
        git-diff command reference ↗ compared_alternative [Git documentation (GPL-2.0)]

        提供命令層級的選項參考;選擇 Pro Git 章節,是因為它逐步說明了如何在提交前檢查變更。

        Atlassian Git tutorials: git diff ↗ compared_alternative [All Rights Reserved]

        容易理解的商業教學;對於同樣的檢查習慣,書籍章節更深入地解釋了暫存與索引的語義。

        04 120 分鐘

        三天複習:獨立完成邊界情況函式

        獨立掌握檢查(不使用 AI 輔助)。

        前置要求

        已完成 Activity 01-03;手邊有用於撰寫解釋的 Day 04 與 Day 05 筆記。

        學習目標

        不使用 AI,實作並測試能處理空字串、"0" 與未知文字的分支,解釋 Day 04-06 中一個出乎意料的 Python 行為,並記錄一次只含一個檔案的安全提交。

        操作指引

        必做:不使用 AI,在撰寫程式之前寫好 4 個驗收案例(""、"0"、"unknown"、" 12 ")及其精確的預期訊息。實作 quantity_message(raw),使每個案例都通過 assert,在拋棄式儲存庫中只提交 quantity.py,並簡短解釋 Day 04-06 中一個出乎意料的結果。

        複盤:執行前預測輸出,與預期訊息逐字比較,並解釋任何差異。

        選做:只有在必做證據完整之後,才把這 4 則訊息翻譯成另一種語言,同時維持相同的規則與相同的 4 個案例。

        自主實作與記錄

        實作 quantity_message(raw)(raw 是 str),使用以下精確訊息:空文字或只含空白的文字 → missing: enter a whole number;等於 0 的 ASCII 數字文字 → zero: nothing to order;其他 ASCII 數字文字 → ok: <數值>;其他一切 → invalid: <strip 後文字的 repr> is not a whole number。以 assert 測試 ""、"0"、"unknown" 和 " 12 ",在拋棄式儲存庫中只提交 quantity.py,並用兩三句話解釋 Day 04-06 中一個出乎意料的結果。

        客觀知識測驗與診斷追蹤

        請回答以下題目檢驗掌握情況。提交前請誠實聲明你的輔助條件。

        聲明輔助條件

        說明:無 AI 輔助屬於誠實聲明條件,非平台監控或強制檢測手段。

        1.

        為什麼僅用分支 if raw: 不足以偵測數量未填寫?

        作答應證與歷史記錄

          活動掌握標準

          在不使用 AI 輔助的情況下,4 個驗收案例全部以精確訊息通過,能正確對比真值判斷與明確比較,提交只含 quantity.py,diff 檢查乾淨,且之後 `git status --short` 的輸出為空。必做與選做內容分開,證據中註明為獨立完成。

          權威來源資源與權利證明

          linking PSF License Version 2

          Python Standard Library: Built-in Types

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

          對應章節 / 時間戳: 「真值測試」、「比較」和「可變序列型別」各節

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

          入選理由:

          用於查閱真值、比較、繫結和物件修改行為的規範性參考資料。

          來源前置條件:

          Day 03 復原演練

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

          執行教材中提供的 Python 範例,並查閱已安裝直譯器的說明。

          對比候選資源與選型分析 (2)
          Python Data Model reference ↗ compared_alternative [PSF License Version 2]

          這份參考資料更深入地說明物件語義,超出了運算式層面練習所需的範圍;stdtypes 能將內容限定在運算子層面。

          The Python Tutorial: An Informal Introduction ↗ compared_alternative [PSF License Version 2]

          以敘述方式介紹相同的運算子;函式庫參考文件則被選為查閱規範簽章的資料。

          linking CC BY-NC-SA 3.0 (book) noncommercial share-alike

          Git User Manual: Recording Changes

          作者 / 機構: Git project | 原始出處連結 ↗

          對應章節 / 時間戳: 將變更記錄到儲存庫

          驗證版本與日期: 核驗日期:2026-10-30

          入選理由:

          用於在安全提交前檢查小範圍差異的第一手參考資料。

          來源前置條件:

          Git 基礎知識

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

          在本機使用 git diff 和 git status;理解差異之後再提交。

          對比候選資源與選型分析 (2)
          git-diff command reference ↗ compared_alternative [Git documentation (GPL-2.0)]

          提供命令層級的選項參考;選擇 Pro Git 章節,是因為它逐步說明了如何在提交前檢查變更。

          Atlassian Git tutorials: git diff ↗ compared_alternative [All Rights Reserved]

          容易理解的商業教學;對於同樣的檢查習慣,書籍章節更深入地解釋了暫存與索引的語義。