# Python第一本书怎么选：写出能解释、能测试的小程序 — 学习任务单

[学习指南](https://unireadinglist.com/zh-cn/guides/python-programming/)

[课程专题: 程序设计导论](https://unireadinglist.com/zh-cn/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-cn/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-cn/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-cn/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-cn/editorial/)
