Tiny Python Projects - 22个项目学Python - Ken Youens-Clark
基本信息
- 书名: Tiny Python Projects
- 作者: Ken Youens-Clark
- 出版社: Manning (2020)
- 页数: 439页
- 原始路径: /books/python/Tiny_Python_Projects.pdf
- 大小: 11.33MB
- 处理日期: 2026-09-03
- 提取方式: pdf-inspector文本提取
核心概述
这本书通过21个小项目教授Python编程基础,每个项目都是一个完整的命令行程序。作者提倡”学编程最有效的方式就是写代码”,用测试驱动开发(TDD)的方法,每个项目都配有测试套件。
章节结构与核心知识点
第一部分:入门 (第1章)
如何编写和测试Python程序
- 使用
new.py模板快速创建新程序 - 命令行参数解析:argparse模块的使用
- 测试驱动开发:先写测试,再写代码
- 添加shebang行和使程序可执行
- 工具链:Black格式化器、Flake8代码检查器、Mypy类型检查
第二部分:字符串操作 (第2-8章)
第2章:The Crow’s Nest - 字符串处理
- 字符串拼接与格式化(f-strings)
- 条件分支:if/elif/else
- 变量类型:str, int, float, bool
第3章:Going on a Picnic - 列表操作
- 列表的创建、索引、切片
- list.append(), list.extend()方法
- 排序和反转:list.sort(), reversed()
- 列表是可变对象
第4章:Jump the Five - 字典操作
- 字典的创建与访问:dict.get()
- 字典推导式
- 在系列中迭代处理的多种方式
- 将for循环转换为列表推导式
第5章:Howler - 文件操作
- 读取文件:read(), readlines(), for循环逐行读取
- 写入文件:write()方法
- 标准输入输出:sys.stdin, sys.stdout
- 低内存版本的文件处理
第6章:Words Count - 综合应用
- 文件输入与字符串迭代
- 格式化输出结果
- 处理多文件输入
第7章:Gashlycrumb - 字典查找
- 使用字典进行查找表实现
- 字典推导式构建查找表
- 命令行参数验证
第8章:Apples and Bananas - 查找与替换
- str.replace()方法
- str.translate()方法(需要str.maketrans())
- 8种不同的替换元音的方法:
- 普通for循环
- 列表推导式
- map()函数
- 普通函数
- lambda表达式
- 正则表达式
- str.translate()(另一种实现)
- 其他方法对比
第三部分:正则表达式 (第14-17章)
第14章:Rhymer - 创建押韵词
- 使用正则表达式分割单词
- stemmer()函数实现
- 捕获组的使用
- 真实性判断(truthiness)
第15章:The Kentucky Friar - 更多正则表达式
- re.split()与捕获组
- 简写字符类:\d, \w, \s等
- 否定简写类:\D, \W, \S
- 手动编写与正则表达式版本对比
第16章:The Scrambler - 随机重排单词中间字母
- 捕获组、非捕获组、可选组
- 编译正则表达式:re.compile()
- 处理多行文本
第17章:Mad Libs - 正则表达式填空游戏
- 查找尖括号内的占位符
- re.findall()查找所有匹配
- 值替换与错误处理
第四部分:算法与设计 (第9-13, 18-19章)
第9章:Dial-a-Curse - 随机侮辱生成器
- 随机模块:random.choice(), random.sample()
- 参数验证与错误处理
- 程序退出码和STDERR输出
第10章:Telephone - 字符串随机变异
- 计算变异数量
- 选择要变异的字符位置
- 使用列表替代字符串(可变性)
第11章:Bottles of Beer - 函数编写与测试
- 测试驱动开发完整流程
- 编写函数:verse()
- 计数递减:range()的使用
- 1,500种不同的解决方案
第12章:Ransom - 随机大写化文本
- 迭代序列元素
- 硬币翻转:random.choice()
- 多种方法对比:列表推导式、map()、普通循环
第13章:Twelve Days of Christmas - 算法设计
- 计数与序数值生成
- 歌词生成算法
- verse()函数设计与调用
第18章:Gematria - ASCII值编码
- ord()函数获取字符的ASCII值
- functools.reduce()函数
- word2num()函数实现
- 排序与测试
第19章:Workout of the Day - CSV解析与表格输出
- 解析CSV文件:csv模块
- pandas.read_csv()函数
- tabulate模块输出表格
- 处理异常数据
第五部分:状态与类型 (第20-22章)
第20章:Password Strength - 密码生成
- 从文件中提取单词列表
- 去重:使用set()
- l33t字体转换
- 标题大小写处理
第21章:Tic-Tac-Toe - 状态探索
- 验证用户输入
- 游戏板状态表示
- 格式化输出游戏板
- 判定获胜者逻辑
第22章:Tic-Tac-Toe Redux - 交互式版本与类型提示
- tuple与namedtuple
- 类型提示:typing模块
- Mypy类型验证
- TypedDict使用
- 不可变结构更新
附录:argparse详解
- argparse.ArgumentParser()创建解析器
- 位置参数、可选参数、标志选项
- FileType类型限制
- choices选项值验证
- 多个相同/不同的位置参数
- help自动生成功能
核心编程理念
- 测试驱动开发:每个项目都强调先写测试再写实现
- 多解对比:同一问题提供多种解决方案并对比优劣
- TDD实践:使用pytest框架进行单元测试
- 命令行最佳实践:argparse、错误处理、退出码
- 可读性优先:代码格式化、类型提示、文档字符串
与其他知识的关联
- Effective C++-中文版-42条指南 - 函数设计原则
- C++-Primer-Plus-第六版 - 类似的入门教学法
- Learn-Python-the-Right-Way - Python入门对照
- Tiny-Python-Projects-Python小程序入门实践 - 已处理笔记