本书是一本零基础的Python编程入门书。全书介绍了Python的基本知识、条件语句、循环语句、列表、函数,并涉及到数据结构、文件读写、算法等基本知识,引入了编程竞赛中重要的软件运行效率的概念。本书立足各编程挑战网站上的真题,将编程的基本思想和Python的知识点拆解成小任务,使读者在解题的过程中逐步探索,以亲自上手实践的方式学习编程。
本书适合想要零基础学习编程和Python的人阅读。
掌握Python可以让计算机帮我们做各种各样的事情,而实践是掌握知识的有效方法。本书通过各大编程竞赛网站的真题来讲解Python编程知识,优势体现在:
1. 学习路线清晰,章节目标明确;
2. 由各编程网站上的真题推进章节,可自行线上评测。
丹尼尔·辛格罗(Daniel Zingaro)博士是多伦多大学密西沙加分校计算机科学教学流中的获奖副教授,他在主动学习方面的专长得到了国际认可。他也是《算法思维》(No Starch Press)的作者。
第 1章 启程 1
1.1 我们要做的事情 1
1.2 Python Shell 2
1.2.1 Windows 2
1.2.2 macOS 3
1.2.3 Linux 3
问题1:单词计数 4
挑战 4
输入 4
输出 4
1.3 字符串 4
1.3.1 表示字符串 5
1.3.2 字符串操作符 5
1.3.3 字符串方法 6
1.4 整数和浮点数 7
1.4.1 变量 9
1.4.2 赋值语句 9
1.4.3 改变变量的值 10
1.5 使用变量来计数单词 11
1.6 读输入 11
1.7 写输出 12
1.8 解决问题:一个完整的Python
程序 13
1.8.1 启动文本编辑器 13
1.8.2 Windows 13
1.8.3 macOS 13
1.8.4 Linux 13
1.8.5 程序 13
1.8.6 运行程序 14
1.8.7 提交给裁判员 14
问题2:圆锥体积 15
挑战 15
输入 15
输出 15
1.9 Python中的更多数学 15
1.9.1 访问Pi 15
1.9.2 指数 16
1.10 字符串和整数之间的转换 16
1.11 解决问题 18
1.12 小结 19
1.13 练习 19
1.14 备注 19
第 2章 做判断 20
问题3:获胜球队 20
挑战 20
输入 20
输出 21
2.1 有条件执行 21
2.2 布尔类型 22
2.3 关系操作符 22
2.4 if语句 24
2.4.1 单独的if 24
2.4.2 带有elif的if 25
2.4.3 带有else的if 26
2.5 解决问题 28
问题4:电话推销员 29
挑战 29
输入 30
输出 30
2.6 布尔操作符 30
2.6.1 or操作符 30
2.6.2 and操作符 31
2.6.3 not操作符 31
2.7 解决问题 32
2.8 注释 34
2.9 输入和输出重定向 34
2.10 小结 35
2.11 练习 36
2.12 备注 36
第3章 重复代码:定循环 37
问题5:三个杯子 37
挑战 37
输入 37
输出 38
3.1 为什么要循环? 38
3.2 for循环 38
3.3 嵌套 40
3.4 解决问题 42
问题6:已占用停车位 44
挑战 44
输入 44
输出 44
3.5 一种新循环 44
3.6 索引 45
3.7 循环的范围 46
3.8 范围用于循环遍历索引 48
3.9 解决问题 49
问题7:数据套餐 50
挑战 50
输入 50
输出 50
3.10 循环读取输入 50
3.11 解决问题 51
3.12 小结 52
3.13 练习 53
3.14 备注 53
第4章 重复代码:不定循环 54
问题8:老虎机 54
挑战 54
输入 54
输出 55
4.1 探索一个测试用例 55
4.2 for循环的局限性 56
4.3 while循环 57
4.3.1 使用while循环 57
4.3.2 循环中的嵌套循环 60
4.3.3 添加布尔操作符 61
4.4 解决问题 61
4.5 模操作符 64
4.6 F-字符串 66
问题9:歌曲播放列表 67
挑战 67
输入 67
输出 68
4.7 字符串切片 68
4.8 解决问题 70
问题10:秘密句子 71
挑战 72
输入 72
输出 72
4.9 for循环的另一个局限性 72
4.10 while循环遍历索引 73
4.11 解决问题 75
4.12 break和continue 75
4.12.1 break 76
4.12.2 continue 77
4.13 小结 78
4.14 练习 78
4.15 备注 78
第5章 用列表来组织值 79
问题11:村庄邻域 79
挑战 79
输入 80
输出 80
5.1 为什么是列表? 80
5.2 列表 81
5.3 列表的可变性 83
5.4 学习有关方法 85
5.5 列表方法 86
5.5.1 添加到一个列表 87
5.5.2 对列表排序 88
5.5.3 从列表中移除数值 88
5.6 解决问题 89
5.7 避免代码重复:还有两个解决
方案 91
5.7.1 使用一个巨大的大小 91
5.7.2 建立保存大小的列表 92
问题12:学校旅行 93
挑战 93
输入 93
输出 93
隐藏的麻烦 93
5.8 分割字符串和连接列表 94
5.8.1 将字符串分割成列表 94
5.8.2 将列表连接成字符串 94
5.9 改变列表值 95
5.10 解决大部分的问题 96
5.10.1 探索一个测试用例 96
5.10.2 代码 97
5.11 如何处理隐藏的麻烦 98
5.11.1 探索一个测试用例 98
5.11.2 更多列表操作 99
5.11.3 寻找最大值的索引 99
5.11.4 解决问题 100
问题13:面包房奖金 100
挑战 101
输入 101
输出 101
5.12 表示一个表格 101
5.12.1 探索一个测试用例 101
5.12.2 嵌套列表 102
5.13 解决问题 104
5.14 小结 105
5.15 练习 106
5.16 备注 106
第6章 用函数来设计程序 107
问题14:纸牌游戏 107
挑战 107
输入 108
输出 108
6.1 探索一个测试用例 108
6.2 定义和调用函数 109
6.2.1 没有实参的函数 110
6.2.2 带实参的函数 110
6.2.3 关键字实参 112
6.2.4 局部变量 112
6.2.5 可变的形参 113
6.2.6 返回值 114
6.3 函数文档 116
6.4 解决问题 117
问题15:可动人偶 119
挑战 120
输入 120
输出 120
6.5 表示盒子 120
6.6 自顶向下的设计 121
6.6.1 进行自顶向下的设计 121
6.6.2 最高层 121
6.6.3 任务1:读输入 123
6.6.4 任务2:检查所有盒子是否
都没问题 124
6.6.5 任务3:获得只有左右高度的
新盒子列表 126
6.6.6 任务4:对盒子进行排序 127
6.6.7 任务5:判断盒子是否
整理好 127
6.6.8 整合在一起 129
6.7 小结 131
6.8 练习 132
6.9 备注 132
第7章 读写文件 133
问题16:文章格式化 133
挑战 133
输入 133
输出 134
7.1 操作文件 134
7.1.1 打开文件 134
7.1.2 读取文件 135
7.1.3 写入文件 138
7.1.4 关闭文件 139
7.2 解决问题 139
7.2.1 探索一个测试用例 139
7.2.2 代码 140
问题17:农场播种 141
挑战 142
输入 142
输出 142
7.3 探索一个测试用例 142
7.4 自顶向下的设计 145
7.4.1 顶层 145
7.4.2 任务1:读取输入 146
7.4.3 任务2:识别奶牛 147
7.4.4 任务3:排除草种 149
7.4.5 任务4:选择数字最小的
草种 150
7.4.6 任务5:写输出 151
7.5 小结 156
7.6 练习 156
7.7 备注 156
第8章 用集合和字典来组织值 157
问题18:电子邮件地址 157
挑战 157
输入 158
输出 158
8.1 使用列表 158
8.1.1 清理一个电子邮件地址 158
8.1.2 主程序 160
8.2 搜索列表的效率 161
8.3 集合 162
8.4 集合方法 164
8.5 搜索集合的效率 165
8.6 解决问题 166
问题19:常见单词 167
挑战 167
输入 167
输出 168
8.7 探索一个测试用例 168
8.8 字典 169
8.9 索引字典 171
8.10 循环遍历字典 173
8.11 倒置字典 175
8.12 解决问题 177
8.12.1 代码 177
8.12.2 添加后缀 178
8.12.3 寻找第k个最常见的
单词 179
8.12.4 主程序 179
问题20:城市和州 180
挑战 180
输入 180
输出 180
8.13 探索一个测试用例 180
8.14 解决问题 182
8.15 小结 183
8.16 练习 184
8.17 备注 184
第9章 用完全搜索设计算法 185
问题21:救生员 185
挑战 185
输入 186
输出 186
9.1 探索一个测试用例 186
9.2 解决问题 187
9.2.1 解雇一名救生员 187
9.2.2 主程序 188
9.2.3 程序的效率 189
问题22:滑雪场 190
挑战 190
输入 191
输出 191
9.3 探索一个测试用例 191
9.4 解决问题 192
9.4.1 确定一个范围的成本 192
9.4.2 主程序 193
问题23:奶牛棒球 195
挑战 195
输入 195
输出 195
9.5 使用三个嵌套循环 195
9.5.1 代码 195
9.5.2 程序的效率 198
9.6 先排序 198
9.6.1 代码 198
9.6.2 程序的效率 200
9.7 Python模块 201
9.8 bisect模块 202
9.9 解决问题 204
9.10 小结 206
9.11 练习 206
9.12 备注 206
第 10章 大O和程序效率 208
10.1 计时的问题 208
10.2 大O 210
10.2.1 常数时间 210
10.2.2 线性时间 211
10.2.3 平方时间 214
10.2.4 立方时间 216
10.2.5 多变量 217
10.2.6 对数时间 218
10.2.7 n log n时间 219
10.2.8 处理函数调用 220
10.2.9 小结 222
问题24:最长围巾 222
挑战 222
输入 223
输出 223
10.3 探索一个测试用例 223
10.4 算法1 223
10.5 算法2 224
问题25:丝带染色 226
挑战 226
输入 226
输出 227
10.6 探索一个测试用例 227
10.7 解决问题 227
10.8 小结 230
10.9 练习 230
10.10 备注 230
后记 231
附录A 问题鸣谢 232