# Python第一本書怎麼選：寫出能解釋、能測試的小程式 — 學習任務單

[學習指南](https://unireadinglist.com/zh-tw/guides/python-programming/)

[課程主題: 程式設計導論](https://unireadinglist.com/zh-tw/subjects/computer-science/#course-intro-programming)

來源核驗日期: 2026-11-03

學習路線與例題編輯責任：University Reading List 編輯專案。

適合會基本算術、能操作檔案的程式設計新手。章節對應 Think Python 第3版、Python Crash Course 第3版與 Guttag 的 Introduction to Computation and Programming Using Python 第3版。任務為本站建議；資料與函式均為本指南原創，並非書中原題或正式營運的監測系統。

## 選擇你的起點

- [ ] 我想從免費、重解釋的路線開始
  使用作者公開的 Think Python 網頁，執行筆記本或自己寫的小檔案。先預測再執行，記錄差異；免費線上閱讀不等於免費取得紙本。

- [ ] 我適合邊做作品邊學
  先用 Python Crash Course 第一部分打底，再從第二部分選一個專案。先完成可測試的小核心，再接圖形或網站；同時啟動三套工具容易遮蔽自身邏輯的問題。

- [ ] 我想進一步做計算模型與資料分析
  使用 Guttag，從前面的程式與測試章節開始。數學基礎較好的新手亦可作為第一本，但後半的模擬與資料方法需要比基本語法更長的學習路線。

## 三本書如何取捨

### Python程式設計思維：如何像電腦科學家一樣思考

Allen B. Downey · 3 · 2024
免費的概念入門主線

適合何時選擇: 希望藉短小可執行的例子、清楚術語與漸進解釋打底，再做大型應用。
何時另選路線: 立刻需要指定專案的技術組合，或完整的統計建模課程。
建議閱讀範圍: 本路線先用第1–3、5–7、9–10章；文字處理可讀第8章，檔案可讀第13章；第14–17章的物件內容可稍後學。
限制與取捨: 第3版重排章節並採筆記本，舊版章號未必對應相同主題。作者提供免費網頁；Colab是可選的第三方執行服務，不是課程證書。

#### 選書前試做

讀Think Python串列與字典章節後，不執行程式，追蹤\[("A",0),("A",None),("A",6)\]，逐筆畫出總和與計數。
檢查標準: 最後總和6、計數2、平均3.0；None不增加計數，零要計數。解釋狀態如何變化，而不只複述輸出。

你的筆記:

________________________________

ISBN: 978-1-098-15543-8

[官方免費閱讀](https://allendowney.github.io/ThinkPython/)

[書目資訊與取得方式](https://unireadinglist.com/zh-tw/subjects/computer-science/think-python-how-to-think-like-a-computer-scientist/)

### Python Crash Course: A Hands-On, Project-Based Introduction to Programming（Python 程式設計：從入門到實務專案）

Eric Matthes · 3 · 2022
有引導的作品路線

適合何時選擇: 希望做出遊戲、資料視覺化或網站，也願意先完成語言基礎。
何時另選路線: 尚不能追蹤短迴圈或函式的執行；直接進入完整框架可能掩蓋理解缺口。
建議閱讀範圍: 第一部分第1–8、10–11章支持本路線。大型專案在第12–14、15–17、18–20章，小程式運作後再選一條。
限制與取捨: 出版社註明第3版於2022年12月發行。相依套件與部署方案會改變，應查作者勘誤和更新，不把印刷版的服務名稱當作永久有效。

#### 選書前試做

讀Python Crash Course第10–11章後，把計算與檔案、輸入處理分開，分別為空輸入、只有零、全部缺失寫三個小測試。
檢查標準: 計算函式接收資料並回傳結果，不開啟檔案；三類輸入的契約與預期值清楚，測試失敗不依賴手動操作整個專案。

你的筆記:

________________________________

ISBN: 9781718502703

[書目資訊與取得方式](https://unireadinglist.com/zh-tw/subjects/computer-science/python-crash-course-matthes/)

### Python運算和程式設計導論

John V. Guttag · 3 · 2021
計算問題求解的延伸

適合何時選擇: 想把程式連接到演算法、模擬與資料解釋，並願意說明數學假設。
何時另選路線: 當下只需要第一段小腳本，或目標是部署教學而非計算課程。
建議閱讀範圍: 先讀第1–5、7–9章；第11–12章延伸演算法，第16–22章進入模擬與統計，第23章介紹pandas。
限制與取捨: 所選第3版出版於2021年，附Python 3.8速查表，不保證所有歷史套件範例在今日皆能原樣執行。記錄環境，查閱配套程式與勘誤。

#### 選書前試做

沿Guttag早期函式與測試路線，說明接受的資料契約，並寫出連接累計總和、計數與已處理資料的迴圈不變量。
檢查標準: 不變量只涵蓋目前處理過的合規資料，區分缺失與數值大小；舉出一種契約外輸入，以及普通單元測試不能保證的一項數值限制。

你的筆記:

________________________________

ISBN: 978-0-262-54236-4

[書目資訊與取得方式](https://unireadinglist.com/zh-tw/subjects/computer-science/introduction-to-computation-and-programming-using-python/)

## 檢查先修準備

### 字串「12」與數字12是同一種值嗎？

你的筆記:

________________________________

### 零值與遺漏值可以互換嗎？

你的筆記:

________________________________

### 實作函式前應說明什麼？

你的筆記:

________________________________

## 六步學習與具體成果

- [ ] 1. 預測短運算式並檢查型別

建議閱讀範圍: Think Python 第1–2章；Crash Course 第1–2章；Guttag 第1–2章。

動手產出: 寫一份小腳本或筆記本，列出數值、字串、比較與除法的六個運算式。執行前寫預期值與型別，再解釋不一致處。

檢查標準: 看到輸出不等於理解；能區分數字、數字印出後的文字，以及輸入取得的字串。

你的筆記:

________________________________

- [ ] 2. 把資料規則轉為條件

建議閱讀範圍: Think Python 第5、7章；Crash Course 第4–5、7章；Guttag 第2.3–2.6節。

動手產出: 先手動追蹤下方資料，標示零值與遺漏值是否計入，再寫一個每列只走訪一次的迴圈。

檢查標準: 保留零，只略過None；換序不改變哪些觀測有效，也不在走訪時刪除原集合的項目。

你的筆記:

________________________________

- [ ] 3. 為計算寫下契約

建議閱讀範圍: Think Python 第3、6章；Crash Course 第8章；Guttag 第4章。

動手產出: 實作前先寫函式的輸入、輸出、空輸入行為，把回傳結果與印出友善報告分開。

檢查標準: 他人不必在提示框輸入就能呼叫函式，回傳值可供後續運用，原始輸入維持不變。

你的筆記:

________________________________

- [ ] 4. 依鍵累加後，再算平均

建議閱讀範圍: Think Python 第9–10章；Crash Course 第3–4、6章；Guttag 第5章。

動手產出: 依完整例題分別維護總和與計數字典，新增一個站點，追蹤第一筆有效讀數如何建立項目。

檢查標準: 每筆有效紀錄只對其站點加一次總和、一次計數；分母不是站點數，也不能包含遺漏紀錄。

你的筆記:

________________________________

- [ ] 5. 讓檔案與失敗可被辨識

建議閱讀範圍: Think Python 第8、13章；Crash Course 第10章；Guttag 第7、9章。

動手產出: 儲存小型本機測試資料，另外寫載入器，交代空白、格式錯誤、非數字欄位的處理，不將這些決定偷偷混入已約定的平均函式。

檢查標準: 檔案載入失敗須回報，不靜默偽裝為成功的空結果。使用虛構資料，不需個資或正式系統紀錄。

你的筆記:

________________________________

- [ ] 6. 交付可重現的小專案

建議閱讀範圍: 重讀 Think Python 第7、9章；Crash Course 第11章；Guttag 第8章。

動手產出: 提交函式、測試資料、測試與執行說明，檢查基準、空輸入、全遺漏、只有零、輸入不變，以及換序或整體重複。

檢查標準: 預期答案應獨立手算，不能從程式輸出抄回測試。讀者可重跑並辨識未支援輸入，少數案例通過不表示已適合正式營運。

你的筆記:

________________________________

## 原創例題與解析: 零是讀數，None不是

對資料\[("A", 12), ("B", None), ("A", 0), ("B", 8), ("A", 18)\]，回傳各站點有效讀數的平均。保留零、略過None，省略沒有有效讀數的站點，且不更動原資料。

前提假設: 每列包含字串站點與有限整數／浮點數或None；布林值、格式錯誤列、NaN不屬於本例輸入契約。讀數使用同一任意單位。空輸入或全遺漏輸入回傳空字典。這是虛構教學資料。 讀數大小與紀錄數量亦須確保各站點的累加總和維持有限；這個簡單浮點計算不處理溢位，也不保證所有有限輸入都能精確計算。

你的筆記:

________________________________

## 改變假設，再做一題: 合併批次不能只保留平均

將原虛構資料分為batch1=\[("A",12),("A",0),("B",None)\]與batch2=\[("A",18),("B",8)\]，保留輸入與缺失規則。若不保存原始資料，怎樣合併批次摘要得到各站點平均？直接平均批次平均是否足夠？本題使用可精確表示的小整數。

你的筆記:

________________________________

## 進入下一階段之前

- 能選擇概念、作品或建模導向的主教材，並說明哪些內容先暫緩。
- 能追蹤完整函式、解釋零與None的差異，以及站點沒有有效讀數時的結果。
- 小專案具備獨立預期值、邊界檢查與執行說明，不把少量成功案例視為普遍正確的證明。

## 答案與解釋

### 字串「12」與數字12是同一種值嗎？

不是。型別不同，支援的操作也不同。應刻意轉換輸入，並先定義不合法值的處理方式，再進行計算。

### 零值與遺漏值可以互換嗎？

不能。本例零是有效觀測，None表示遺漏；兩者在真偽測試中皆為假，因此篩選條件必須明寫資料規則。

### 實作函式前應說明什麼？

規定可接受輸入、回傳輸出與邊界行為。本例省略沒有有效讀數的站點，不改變呼叫者的資料；沒有有效值不代表平均為零。

### 零是讀數，None不是

1. 先看資料：A有12、0、18，總和30，共3筆；B僅有有效讀數8，None既不貢獻數值，也不貢獻計數。
2. 分別建立總和、計數字典，走訪時以value is None決定是否略過，不使用if value判定有效性。
3. 每筆有效紀錄加入相應站點的總和，並使其計數加一；迴圈後，各總和除以各自計數。
4. A得到30 / 3 = 10.0，B得到8 / 1 = 8.0。從未有有效觀測的站點沒有總和、計數項目，會被省略，因此沒有零分母。
5. 若錯用真偽值篩選，A的零會被捨棄，得到(12 + 18) / 2 = 15.0。程式沒有例外，仍可能回答了錯誤的問題。

結果為\{"A": 10.0, "B": 8.0\}。下方完整函式表達約定的資料規則，回傳結果、不改輸入，也不把計算綁定於檔案、筆記本或輸入提示。

## 零是讀數，None不是 — python

```python
def means_by_site(rows):
    totals = {}
    counts = {}
    for site, value in rows:
        if value is None:
            continue
        totals[site] = totals.get(site, 0) + value
        counts[site] = counts.get(site, 0) + 1
    means = {}
    for site in totals:
        means[site] = totals[site] / counts[site]
    return means
```

檢驗結果: 檢查\[\] → \{\}、\[("A", None)\] → \{\}與\[("A", 0)\] → \{"A": 0.0\}。對題給小整數，重排資料或複製全部有效資料會保持平均；一般浮點輸入還需單獨分析捨入，不能保證順序變化後精確相等。("A", "bad")等資料需要在本有限契約之外另訂驗證規則。

### 改變假設，再做一題: 合併批次不能只保留平均

1. batch1得到A:(總和12,計數2)，B沒有有效摘要；batch2得到A:(18,1)、B:(8,1)。沒有摘要不等於測得零。
2. 逐站點相加總和與計數，得A:(30,3)、B:(8,1)，最後除一次得A10.0、B8.0，與一起處理原始資料相同。
3. A的兩個批次平均為6與18，直接平均得12，因批次樣本數不同而錯誤。加權平均(2×6+1×18)/(2+1)=10才與合併結果一致。

每批為每站點保留(總和,計數)，分別相加後再除。只有平均而無計數，通常無法恢復合併平均。本題回傳\{"A":10.0,"B":8.0\}。

檢驗結果: 把一筆資料移到另一批重算：這些小整數的合併平均不變，但批次平均的簡單平均可能變化。一般浮點輸入在數學上重新分組，並不保證逐位相等；還須單獨評估捨入與有依據的誤差界限。

## 常見誤區

### 輸出合理，不代表程式正確

錯誤答案A = 15.0也很平常。保留能區分預期規則與常見錯誤實作的手算案例。

### 把教材版本當作軟體環境

章節對應特定版次，相依套件與託管說明卻會演變。記錄實際Python與套件版本，部署前查作者更新。

### 未隔離邏輯就加入套件

平均函式只需內建功能。先獨立測試，再連接繪圖、CSV載入或網頁，否則環境與邏輯錯誤更難區分。

## 來源與版次核驗

- [Allen B. Downey — free third-edition webbook and contents](https://allendowney.github.io/ThinkPython/)
  作者第3版網頁確認免費全文、筆記本路線與章節順序。可選的線上執行服務與閱讀不同，本指南不複製原書習題。

- [O’Reilly — third-edition publication and copyright details](https://www.oreilly.com/library/view/think-python-3rd/9781098155421/copyright-page01.html)
  出版社版權頁記錄2024年第3版及修訂歷史。平台產品ISBN與勘誤參考號不同，不因平台使用另一識別碼就替換既有紙本ISBN。

- [No Starch Press — third-edition ISBN, date and contents](https://nostarch.com/python-crash-course-3rd-edition)
  出版社確認第3版ISBN、2022年12月發行與20章結構。專案選擇及本站資料彙整任務屬獨立學習建議。

- [Eric Matthes — third-edition corrections and project updates](https://ehmatthes.github.io/pcc_3e/updates/)
  作者維護依印次區分的勘誤與單獨的部署更新，不以動態網頁的舊導語推斷目前精確印次。

- [MIT Press — Guttag third edition and format-specific ISBNs](https://mitpress.mit.edu/9780262542364/introduction-to-computation-and-programming-using-python/)
  MIT Press確認2021年第3版平裝ISBN 9780262542364及不同電子書ISBN、日期；計算與建模定位並非相依版本永久相容的保證。

- [MIT Press — third-edition table of contents](https://mitp-content-server.mit.edu/books/content/sectbyfn/books_pres_0/13616/3E_TOC.pdf?dl=1)
  官方目錄PDF確認函式第4章、結構化型別第5章、檔案第7章、測試第8章、例外第9章、pandas第23章；後段建模在此為選讀延伸。

- [Python documentation — truth values, including zero and None](https://docs.python.org/3/library/stdtypes.html#truth-value-testing)
  Python官方型別文件確認零與None在真偽測試中皆為假。本例函式、數字、錯誤反例與檢查由本站原創並已獨立執行。

- [Python documentation — floating-point representation and accumulation limits](https://docs.python.org/3/tutorial/floatingpoint.html)
  官方數值教程說明表示誤差與累積誤差。本頁小整數可精確核對，但一般浮點契約不保證重新分組後結果完全一致。

這些是本站建議的學習活動，並非大學官方作業，也不代表對每本書逐頁通讀。

[編輯與選書方法](https://unireadinglist.com/zh-tw/editorial/)
