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章文件与 STDINfor 循环迭代文件、多文件统计、格式化输出
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)

可行动点

  1. 用 new.py 模板起步:每个新项目都从标准模板开始,保证结构一致
  2. 先写测试再写代码:哪怕只是几个 assert,养成 TDD 习惯
  3. 每章做完后回头看 Going Further:扩展练习才是真正成长的地方
  4. 用多种方法实现同一个项目:比如列表推导 vs for 循环 vs map,比较优劣
  5. 22 个项目的难度曲线合理:可以按每周 1-2 个项目的节奏,3-6 个月啃完

延伸关联