04 / 90

Day 04: 值、繫結與可觀察文字

預測並執行 Python 運算式,區分值與變數繫結,並在不把標籤和物件本身混為一談的前提下回報可觀察的文字/資料。

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

值普查與型別標籤

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

前置要求

已完成 Day 03 的補救練習;能夠從終端機啟動 Python;複習「先預測、再觀察」的方法。

學習目標

使用 repr()、type() 和 bool() 區分在螢幕上看起來相似的值(0、"0"、""、None),並解釋為什麼文字 "0" 不是數字 0。

操作指引

學習來源:在本活動現有的閱讀與練習時段內,參考 Automate the Boring Stuff with Python, 3rd edition 的 Chapter 1; Practice Questions; Appendix B answers,用自己的話解釋一處與本地任務的聯繫。保留現有練習與驗收檢查;若外部資料無法存取,使用課程自寫的解釋。必做任務:把下面的程式碼儲存為 census.py。執行之前,先寫下每一行輸出的預測。然後執行 python3 census.py,記錄確切的輸出,並與預測進行比較。

for value in [0, "0", "", None]:
    print(repr(value), type(value).__name__, bool(value))
print("0" == 0, int("0") == 0)

用一兩句話解釋:為什麼 "0"(文字)和 0(整數)在 repr() 顯示、型別和真值上都不同。

選做任務:只有在必做證據完成之後,才在串列中再加入一個你自選的值(例如 0.0 或 "False"),先預測它的那一行,再重新執行。

自主實作與記錄

在執行下面的程式之前,預測全部 5 行輸出,然後記錄確切的輸出:

for value in [0, "0", "", None]:
    print(repr(value), type(value).__name__, bool(value))
print("0" == 0, int("0") == 0)

最後,解釋為什麼文字 "0" 不是數字零。

客觀知識測驗與診斷追蹤

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

聲明輔助條件

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

1.

print(repr("0"), type("0").__name__, bool("0")) 會輸出什麼?

作答應證與歷史記錄

    活動掌握標準

    你的預測紀錄和觀察到的輸出包含上面全部 5 行確切內容,並且解釋中指出了型別差異(str 與 int)、真值規則(非空字串為 True),以及需要用 int() 明確轉換。紀錄中需寫明必做/選做的邊界,並聲明未使用 AI 輔助。

    權威來源資源與權利證明

    linking Copyright Al Sweigart; edition-specific reuse terms unverified linking only; no reproduction

    Automate the Boring Stuff with Python, 3rd edition

    作者 / 機構: Al Sweigart | 原始出處連結 ↗

    對應章節 / 時間戳: Chapter 1; 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)
    The Python Tutorial ↗ compared_alternative [PSF License Version 2]

    Guided Python syntax but assumes programming familiarity; paired with the beginner text rather than used as its replacement.

    MIT OCW 6.0001 ↗ compared_alternative [CC BY-NC-SA 4.0]

    Lectures and problem sets teach a broader CS1 course; the book offers shorter text-first entry and an answer appendix.

    linking PSF License Version 2

    Python Standard Library: Built-in Types

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

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

    驗證版本與日期: Python 3.12 documentation (verified 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 | 原始出處連結 ↗

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

    驗證版本與日期: Verified 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 輔助)。

    前置要求

    已完成 Day 04 的活動 1;能夠從終端機啟動 Python。

    學習目標

    把指派敘述追蹤為「名字繫結到物件」,並預測重新繫結一個名字不會改變另一個名字所參照的物件。

    操作指引

    必做任務:把下面的程式碼儲存為 binding.py。執行之前,先預測三行輸出中的每一行,並為每條指派敘述畫一個從名字指向其所參照串列物件的箭頭。

    x = ["draft"]
    y = x
    x = ["replaced"]
    print(y)
    print(x)
    print(x is y)

    執行 python3 binding.py,記錄確切的輸出,並解釋第 3 行改變了哪個繫結、哪個繫結沒有改變。

    選做任務:只有在必做證據完成之後,才在第 3 行前後加入 print(id(x), id(y)),並描述發生了什麼變化。

    自主實作與記錄

    預測下面程式的三行輸出,執行它,並解釋哪個名字被重新繫結了:

    x = ["draft"]
    y = x
    x = ["replaced"]
    print(y)
    print(x)
    print(x is y)

    客觀知識測驗與診斷追蹤

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

    聲明輔助條件

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

    1.

    執行 x = ["draft"]; y = x; x = ["replaced"] 之後,print(y) 顯示什麼?

    作答應證與歷史記錄

      活動掌握標準

      你的預測紀錄和觀察到的輸出包含上面三行確切內容,箭頭圖顯示第 3 行之後 y 仍繫結在原來的串列上,並且解釋中說明指派是重新繫結名字,而不是覆寫物件。紀錄中需寫明必做/選做的邊界,並聲明未使用 AI 輔助。

      權威來源資源與權利證明

      linking PSF License Version 2

      Python Standard Library: Built-in Types

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

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

      驗證版本與日期: Python 3.12 documentation (verified 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 | 原始出處連結 ↗

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

      驗證版本與日期: Verified 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 分鐘

      小改動:讓報告更安全

      Agent 輔助工程檢查:需聲明你授予的權限與審查邊界;Agent 的輸出不構成獨立掌握證據。

      前置要求

      已完成 Day 04 的活動 1~2;已安裝 Git 並設定 user.name 和 user.email;有一個可以由你指揮的 AI 程式設計 Agent。

      學習目標

      指揮 Agent 做一個小而可審查的改動,把含糊的文字標籤替換為 repr/型別報告,然後親自核查 diff,並只提交這一處改動。

      操作指引

      必做任務:建立一個包含原始誤導性報告的練習儲存庫:

      git init report-demo && cd report-demo
      printf 'count = "0"\nprint("count=" + count)\n' > report.py
      git add report.py && git commit -m "Add count report"
      python3 report.py

      該程式印出 count=0,掩蓋了 count 是文字 "0" 而不是數字 0 的事實。原始的 report.py 是:

      count = "0"
      print("count=" + count)

      請讓 Agent 只修改 report.py 中的 print 行,使其顯示 count 的 repr 和型別。聲明你授予的權限(例如:只允許編輯 report.py,不允許提交)。在執行任何東西之前,先預測新的輸出。然後由你自己審查並提交:

      git status --short
      git diff -- report.py
      git diff --check
      python3 report.py
      git add report.py
      git commit -m "Show repr and type in count report"
      git status --short

      如果 git status 列出了 report.py 以外的檔案(例如 ?? notes.txt),那就是無關改動:不要暫存它,在提交前刪除或還原它。

      選做任務:只有在必做證據完成之後,才讓 Agent 再印出 bool(count),並用同樣的方式審查第二個 diff。

      自主實作與記錄

      從下面的 report.py 開始:

      count = "0"
      print("count=" + count)

      讓 Agent 修改 print 行,使輸出為 count='0' type=str。記錄你對新輸出的預測、你審查過的 git status --short 與 git diff -- report.py 的輸出、git diff --check 的結果,以及你建立的提交。拒絕 Agent 建立的任何無關檔案。

      客觀知識測驗與診斷追蹤

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

      聲明輔助條件

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

      1.

      在提交 Agent 的改動之前,git status --short 顯示 M report.py 和 ?? notes.txt。你從未要求建立 notes.txt。安全的下一步是什麼?

      作答應證與歷史記錄

        活動掌握標準

        你的紀錄包含:你的預測、顯示只改動了 print 行的已審查 git diff、git diff --check 的結果、觀察到的輸出 count='0' type=str、只涉及 report.py 的提交,以及你授予 Agent 的權限聲明。紀錄中需寫明必做/選做的邊界,並聲明這項工作使用了 Agent 輔助。

        權威來源資源與權利證明

        linking PSF License Version 2

        Python Standard Library: Built-in Types

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

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

        驗證版本與日期: Python 3.12 documentation (verified 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 | 原始出處連結 ↗

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

        驗證版本與日期: Verified 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 輔助)。

        前置要求

        已完成 Day 04 的活動 1~3。

        學習目標

        在不借助任何 AI 的情況下,預測三個關於值與繫結的短程式片段的輸出,透過執行加以核對,並解釋任何不一致的根本原因。

        操作指引

        必做任務:不使用 AI,在執行任何片段之前,先寫下下面三個片段每一行輸出的預測。然後執行每個片段(例如儲存為 a.py、b.py、c.py),記錄確切的輸出,並替每一行標註「一致」或「不一致」。選一個不一致之處解釋其根本原因;如果全部一致,就解釋你認為最難的那個片段。

        片段 A:

        print(repr(None), repr("None"), None == "None")

        片段 B:

        a = "draft"
        b = a
        a = a + "!"
        print(a, b)

        片段 C:

        items = ["draft"]
        alias = items
        items = items + ["final"]
        print(alias, items)
        print(alias is items)

        選做任務:只有在必做證據完成之後,才修改某個片段中的一個輸入(例如把片段 B 中的 "!" 換成 "?"),先預測再重新執行。

        自主實作與記錄

        先預測、再執行下面三個片段,並把預測與確切輸出並排記錄:

        片段 A:

        print(repr(None), repr("None"), None == "None")

        片段 B:

        a = "draft"
        b = a
        a = a + "!"
        print(a, b)

        片段 C:

        items = ["draft"]
        alias = items
        items = items + ["final"]
        print(alias, items)
        print(alias is items)

        從值與繫結的角度解釋一個不一致之處(或你認為最難的片段)。

        客觀知識測驗與診斷追蹤

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

        聲明輔助條件

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

        1.

        n = 5; m = n; n = n + 1; print(m, n) 會輸出什麼?

        作答應證與歷史記錄

          活動掌握標準

          你的紀錄顯示:執行前寫下的預測、與上文一致的三個片段的確切觀察輸出,以及從值與繫結角度對一個不一致之處(或最難片段)的正確根因解釋。紀錄中需寫明必做/選做的邊界,並聲明未使用 AI 輔助。

          權威來源資源與權利證明

          linking PSF License Version 2

          Python Standard Library: Built-in Types

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

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

          驗證版本與日期: Python 3.12 documentation (verified 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 | 原始出處連結 ↗

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

          驗證版本與日期: Verified 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]

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