Tiny Python Projects — 22 个项目学 Python
“学习编程不必无聊。21 个活动通过谜题和游戏教授 Python 基础。” — 封底推荐语
Manning 出版,2020 年。作者 Ken Youens-Clark,亚利桑那大学高级科学程序员,20 年编程经验。
核心理念
教学方法:项目驱动 + 测试驱动(TDD)
- 每章一个完整的命令行小项目,从需求描述 → 编写代码 → 运行测试
- 先给测试,再写代码(test-first),用测试驱动学习
- 每个项目都有 “Going Further” 扩展练习,鼓励回头用更高级的方法重做
为什么这样教
- 最大的入门障碍是:语法学了一堆,但不会写一个接受参数、做有用事情的完整程序
- 语法概念脱离上下文很难记住,放在真实项目里才有意义
- “Practice, practice, practice” — 通往卡内基音乐厅的路
不教什么
- 不面向对象编程(OOP)—— 专注命令式/函数式基础
- 不使用 Jupyter Notebooks —— 所有程序都是真实的命令行工具
- 不追求广度,追求深度:把一个主题做透做熟
全书结构:22 个项目,从易到难
第一阶段:基础入门(第 0-3 章)
| 项目 | 章节 | 主题 | 关键知识点 |
|---|
| Getting Started | 序章 | 环境搭建 | 命令行程序、TDD、new.py 模板、格式化/代码检查 |
| hello.py | 第1章 | 第一个程序 | shebang、$PATH、argparse、main()/get_args() 结构、pytest |
| The Crow’s Nest | 第2章 | 字符串操作 | 字符串方法、切片、比较、条件分支、f-string 格式化 |
| Going on a Picnic | 第3章 | 列表操作 | append/extend、索引/切片、in 查找、sort/reverse、join、可变性 |
第二阶段:核心数据结构(第 4-7 章)
| 项目 | 章节 | 主题 | 关键知识点 |
|---|
| Jump the Five | 第4章 | 字典 | dict 创建/访问/方法、字符编码映射 |
| Howler | 第5章 | 文件与 STDOUT | 读写文件、sys.stdout、低内存逐行处理 |
| Words Count (wc) | 第6章 | 文件与 STDIN | for 循环迭代文件、多文件统计、格式化输出 |
| Gashlycrumb | 第7章 | 字典查找 | 文件读取到字典、字典推导式、查表 |
第三阶段:字符串变换与随机(第 8-12 章)
| 项目 | 章节 | 主题 | 关键知识点 |
|---|
| Apples and Bananas | 第8章 | 查找替换 | str.replace、str.translate、8 种替换方法对比、重构与测试 |
| Dial-a-Curse | 第9章 | 随机侮辱生成器 | random 模块、seed 控制随机性、parser.error()、退出码与 STDERR |
| Telephone | 第10章 | 随机字符突变 | 突变空间、随机选择位置、列表 vs 字符串修改 |
| Bottles of Beer | 第11章 | 函数与测试 | 函数定义、TDD 写 verse() 函数、倒计时、1500 种不同解法 |
| Ransom | 第12章 | 随机大小写 | 迭代序列、列表推导式、map()、多种实现方法对比 |
第四阶段:算法与正则(第 13-18 章)
| 项目 | 章节 | 主题 | 关键知识点 |
|---|
| Twelve Days of Christmas | 第13章 | 算法设计 | 序数生成、verse() 函数、生成多节歌词 |
| Rhymer | 第14章 | 正则表达式入门 | capture groups、词干提取、Truthiness |
| The Kentucky Friar | 第15章 | 正则进阶 | re.split、简写类 \w \d、否定类、捕获组分割 |
| The Scrambler | 第16章 | 随机打乱单词中部 | 捕获/非捕获/可选组、re.compile、打乱算法 |
| Mad Libs | 第17章 | 正则替换 | re.sub、占位符查找、交互式输入 |
| Gematria | 第18章 | ASCII 数值编码 | ord()、字符范围、functools.reduce、排序与测试 |
第五阶段:高级项目(第 19-22 章)
| 项目 | 章节 | 主题 | 关键知识点 |
|---|
| Workout of the Day | 第19章 | CSV 解析与表格输出 | csv 模块、pandas.read_csv、错误处理、文本表格格式化 |
| Password Strength | 第20章 | 密码生成器 | set 去重、过滤、title case、l33t 替换、采样生成密码 |
| Tic-Tac-Toe | 第21章 | 状态探索 | 棋盘表示、胜负判定、any()/all()、命令行参数验证 |
| Tic-Tac-Toe Redux | 第22章 | 交互式+类型提示 | tuple、namedtuple、type hints、mypy 类型检查、不可变结构、TypedDict |
附录
- 附录 A:argparse 完整参考
- 索引:完整的主题索引
关键教学洞见
1. 每个程序的标准结构
#!/usr/bin/env python3
"""模块文档字符串"""
import argparse
def get_args():
"""解析命令行参数"""
parser = argparse.ArgumentParser(description='...')
parser.add_argument(...)
return parser.parse_args()
def main():
"""主逻辑"""
args = get_args()
# ...
if __name__ == '__main__':
main()
2. 测试驱动学习的节奏
- 先读需求和测试,理解”正确行为”是什么
- 写一点代码,跑测试,看哪里失败
- 修改代码,再跑测试
- 重复直到全部通过 → 再看 “Going Further” 挑战
3. 多种解法的价值
- 第12章专门比较了 5 种实现随机大小写的方法(for 循环、列表推导、map 等)
- 第11章提到啤酒歌有 1500 种不同解法
- 鼓励读者回头用更高级的技巧重做早期项目
4. argparse 是教学核心工具
- 从第 1 章就开始用 argparse,而不是 input()
- 每个项目都练习参数定义、验证、默认值、帮助信息
- 符合真实世界 Python 命令行工具的开发方式
与其他 Python 书籍的对比
| 方面 | 本书 | 传统教材 |
|---|
| 学习方式 | 做项目 | 讲语法 |
| 项目完整性 | 每个都是完整命令行工具 | 代码片段 |
| 测试 | 每章都有测试套件 | 很少有测试 |
| 互动性 | 低(自己读+写代码) | 低 |
| 覆盖深度 | 22 个主题深入 | 广而浅 |
| 适合人群 | 有一点编程基础的新手 | 零基础 |
关联:《Learn Python the Right Way》-像计算机科学家一样思考(同为项目式学习,但更偏计算机科学概念;本书更偏 Python 语言实践和 TDD)
适合谁 / 不适合谁
✅ 适合
- 有一点点编程基础,想系统学 Python 的人
- 喜欢”做中学”(learning by doing)的人
- 想学会写真正可用的命令行工具的人
- 想入门测试驱动开发(TDD)的人
❌ 不适合
- 完全零基础、连变量是什么都不知道的人(建议先看更入门的)
- 想学 Web 开发、数据分析、机器学习的人(本书是基础语言书)
- 想学面向对象编程的人(本书刻意不涉及 OOP)
可行动点
- 用 new.py 模板起步:每个新项目都从标准模板开始,保证结构一致
- 先写测试再写代码:哪怕只是几个 assert,养成 TDD 习惯
- 每章做完后回头看 Going Further:扩展练习才是真正成长的地方
- 用多种方法实现同一个项目:比如列表推导 vs for 循环 vs map,比较优劣
- 22 个项目的难度曲线合理:可以按每周 1-2 个项目的节奏,3-6 个月啃完
延伸关联