第1章 启程:Game Over程序 1
1.1 剖析Game Over程序 1
1.2 Python 简介 2
1.2.1 Python易于使用 3
1.2.2 Python功能强大 3
1.2.3 Python是面向对象的 3
1.2.4 Python是一种“胶水”语言 4
1.2.5 Python无所不在 4
1.2.6 Python有一个强大的社区 4
1.2.7 Python是免费的、开源的 4
1.3 在Windows上设置Python 4
1.4 在其他操作系统上设置Python 5
1.5 IDLE简介 6
1.5.1 通过交互模式进行编程 6
1.5.2 通过脚本模式进行编程 9
1.6 回到Game Over程序 11
1.6.1 使用注释 12
1.6.2 使用空行 13
1.6.3 打印字符串 13
1.6.4 等待用户 13
1.7 小结 14
第2章 类型、变量以及简单I/O:Useless Trivia程序 15
2.1 Useless Trivia程序简介 15
2.2 使用引号和字符串 16
2.2.1 Game Over 2.0程序简介 16
2.2.2 在字符串内部使用引号 17
2.2.3 打印输出多个值 18
2.2.4 为print指定结束字符串 19
2.2.5 创建三重引号字符串 19
2.3 使用转义序列和字符串 20
2.3.1 FancyCredits程序简介 20
2.3.2 前进一个制表符位 21
2.3.3 打印反斜杠 22
2.3.4 插入换行符 22
2.3.5 插入引号 22
2.3.6 触发系统蜂鸣器 23
2.4 字符串的连接和重复 23
2.4.1 Silly Strings程序简介 24
2.4.2 字符串的连接 25
2.4.3 使用行继续符 25
2.4.4 字符串的重复 25
2.5 使用数字 26
2.5.1 Word Problems程序简介 26
2.5.2 解数值类型 27
2.5.3 使用数学运算符 27
2.6 理解变量 28
2.6.1 Greeter程序简介 29
2.6.2 创建变量 29
2.6.3 使用变量 30
2.6.4 变量命名 30
2.7 获取输入 31
2.7.1 PersonalGreeter程序简介 31
2.7.2 使用input()函数 32
2.8 使用字符串方法 33
2.8.1 Quotation Manipulation程序简介 34
2.8.2 通过字符串方法创建新字符串 35
2.9 使用正确的类型 37
2.9.1 Trust Fund Buddy-Bad程序简介 37
2.9.2 跟踪逻辑错误 38
2.10 转换值的类型 39
2.10.1 TrustFundBuddy-Good程序简介 39
2.10.2 将字符串转换成整数 40
2.10.3 使用复合赋值运算符 41
2.11 回到Useless Trivia程序 42
2.11.1 创建初始注释 42
2.11.2 获取用户输入 43
2.11.3 打印小写和大写形式的name 43
2.11.4 打印name五次 43
2.11.5 计算秒数 44
2.11.6 计算moon_weight和sun_weight 44
2.11.7 等一等用户 44
2.12 小结 44
第3章 条件分支、while循环以及程序策划:Guess My Number游戏 46
3.1 Guess My Number游戏简介 46
3.2 生成随机数 47
3.2.1 Craps Roller程序简介 47
3.2.2 引入random模块 48
3.2.3 使用randint()函数 49
3.2.4 使用randrange()函数 49
3.3 使用if语句 49
3.3.1 Password程序简介 50
3.3.2 观察if语句 51
3.3.3 创建条件 51
3.3.4 理解比较运算符 52
3.3.5 通过缩进创建代码块 53
3.3.6 构建自己的if语句 53
3.4 使用else子句 53
3.4.1 Grated or Denied程序简介 54
3.4.2 观察else子句 55
3.5 使用elif子句 55
3.5.1 Mood Computer程序简介 56
3.5.2 观察elif子句 58
3.6 创建while循环 59
3.6.1 Three-Year-OldSimulator程序简介 60
3.6.2 观察while循环 60
3.6.3 初始化哨兵变量 61
3.6.4 检查哨兵变量 61
3.6.5 更新哨兵变量 62
3.7 避免无限循环 62
3.7.1 LosingBattle程序简介 62
3.7.2 跟踪程序 64
3.7.3 创建可以变成False的条件 64
3.8 将值用作条件 65
3.8.1 Maitre D'程序简介 66
3.8.2 把值解释为True或False 67
3.9 故意创建无限循环 67
3.9.1 Finicky Counter程序简介 68
3.9.2 通过break语句退出循环 68
3.9.3 通过continue语句跳回循环的开头 69
3.9.4 理解break和continue的使用场景 69
3.10 使用复合条件 69
3.10.1 Exclusive Network程序简介 70
3.10.2 理解逻辑运算符not 72
3.10.3 理解逻辑运算符and 73
3.10.4 理解逻辑运算符or 74
3.11 规划程序 74
3.11.1 利用伪码编制算法 75
3.11.2 逐步对算法进行提炼 75
3.12 回到Guess My Number游戏 76
3.12.1 程序规划 76
3.12.2 创建初始注释块 77
3.12.3 引入random模块 77
3.12.4 游戏说明 77
3.12.5 设置初始值 77
3.12.6 创建猜测循环 78
3.12.7 向玩家表示祝贺 78
3.12.8 等待玩家退出 78
3.13 小结 78
第4章 for循环、字符串以及元组:Word Jumble游戏 80
4.1 Word Jumble游戏简介 80
4.2 使用for循环 81
4.2.1 Loopy String程序简介 81
4.2.2 理解for循环 82
4.2.3 创建for循环 83
4.3 通过for循环进行计数 83
4.3.1 Counter程序简介 83
4.3.2 前向计数 84
4.3.3 按五为单位进行计数 85
4.3.4 后向计数 85
4.4 对字符串使用序列运算符和函数 86
4.4.1 Message Analyzer程序简介 86
4.4.2 使用len()函数 87
4.4.3 使用in运算符 87
4.5 对字符串进行索引 88
4.5.1 Random Access程序简介 88
4.5.2 使用正的位置编号 89
4.5.3 使用负的位置编号 90
4.5.4 随机访问字符串元素 91
4.6 理解字符串的不变性 92
4.7 构建新字符串 93
4.7.1 No Vowels程序简介 93
4.7.2 创建常量 94
4.7.3 通过已有的字符串创建新字符串 95
4.8 对字符串进行切片操作 96
4.8.1 Pizza Slicer程序简介 96
4.8.2 理解None 97
4.8.3 理解切片 98
4.8.4 创建切片 98
4.8.5 使用切片速记法 99
4.9 创建元组 99
4.9.1 Hero'sInventory程序简介 100
4.9.2 创建空元组 101
4.9.3 把元组当作条件 101
4.9.4 创建带有元素的元组 102
4.9.5 打印元组 102
4.9.6 遍历元组中的元素 102
4.10 使用元组 103
4.10.1 Hero's Inventory 2.0程序简介 103
4.10.2 准备工作 104
4.10.3 对元组使用len()函数 104
4.10.4 对元组使用in运算符 104
4.10.5 对元组进行索引 105
4.10.6 对元组进行切片 105
4.10.7 理解元组的不变性 106
4.10.8 元组的连接操作 106
4.11 回到Word Jumble游戏 107
4.11.1 准备工作 107
4.11.2 对题目的创建部分进行设计 107
4.11.3 创建空的题目字符串 108
4.11.4 设置循环 108
4.11.5 产生word中的随机位置 108
4.11.6 创建新版的jumble 108
4.11.7 创建新版的word 109
4.11.8 欢迎玩家的到来 109
4.11.9 获取玩家的答案 109
4.11.10 向玩家表示恭喜 109
4.11.11 结束游戏 110
4.12 小结 110
第5章 列表和字典:Hangman游戏 111
5.1 Hangman游戏简介 111
5.2 使用列表 113
5.2.1 Hero's Inventory 3.0程序简介 113
5.2.2 创建列表 114
5.2.3 对列表使用len()函数 114
5.2.4 对列表使用in运算符 114
5.2.5 对列表进行索引 114
5.2.6 对列表进行切片 115
5.2.7 对列表进行连接 115
5.2.8 理解列表的可变性 115
5.2.9 通过索引对列表元素进行赋值 116
5.2.10 通过切片对列表进行赋值 116
5.2.11 删除列表元素 116
5.2.12 删除列表切片 117
5.3 使用列表方法 117
5.3.1 High Scores程序简介 117
5.3.2 准备工作 118
5.3.3 显示菜单 118
5.3.4 退出程序 119
5.3.5 显示得分记录 119
5.3.6 添加得分记录 119
5.3.7 删除得分记录 120
5.3.8 对得分记录进行排序 120
5.3.9 处理无效选项 121
5.3.10 等一等用户 121
5.4 理解元组和列表的使用场景 122
5.5 使用嵌套序列 122
5.5.1 High Scores 2.0程序简介 122
5.5.2 创建嵌套序列 123
5.5.3 访问嵌套元素 124
5.5.4 序列的解包 125
5.5.5 准备工作 125
5.5.6 访问嵌套的元组并显示得分 126
5.5.7 通过附加嵌套元组的方式添加得分记录 126
5.5.8 处理无效菜单项 126
5.5.9 等一等用户 126
5.6 理解共享引用 127
5.7 使用字典 129
5.7.1 GeekTranslator程序简介 129
5.7.2 创建字典 130
5.7.3 访问字典的值 130
5.7.4 准备工作 132
5.7.5 获取值 133
5.7.6 增加键值对 133
5.7.7 替换键值对 134
5.7.8 删除键值对 134
5.7.9 结束程序 135
5.7.10 理解字典的需求 135
5.8 回到Hangman游戏 136
5.8.1 准备工作 136
5.8.2 创建常量 137
5.8.3 初始化变量 140
5.8.4 创建主循环 140
5.8.5 获取用户的答案 140
5.8.6 判断猜测结果 141
5.8.7 结束程序 141
5.9 小结 142
第6章 函数:Tic-Tac-Toe游戏 143
6.1 Tic-Tac-Toe游戏简介 143
6.2 创建函数 144
6.2.1 Instructions程序简介 145
6.2.2 定义函数 146
6.2.3 编制函数的文档说明 146
6.2.4 调用函数 147
6.2.5 理解抽象 147
6.3 使用参数和返回值 147
6.3.1 Receive and Return程序简介 148
6.3.2 通过参数获取信息 149
6.3.3 通过返回值反馈信息 149
6.3.4 理解封装 150
6.3.5 在同一个函数中接收和返回值 150
6.3.6 理解软件复用 151
6.4 使用关键字参数和默认参数值 152
6.4.1 Birthday Wishes程序简介 152
6.4.2 使用位置形参和位置实参 153
6.4.3 使用位置形参和关键字实参 154
6.4.4 使用默认参数值 154
6.5 使用全局变量和常量 156
6.5.1 理解作用域 156
6.5.2 Global Reach程序简介 157
6.5.3 从函数内部读取全局变量 158
6.5.4 在函数内部屏蔽全局变量 158
6.5.5 从函数内部修改全局变量 159
6.5.6 理解何时使用全局变量和常量 159
6.6 回到Tic-Tac-Toe游戏 160
6.6.1 规划Tic-Tac-Toe游戏 160
6.6.2 准备工作 162
6.6.3 display_instruct()函数 162
6.6.4 ask_yes_no()函数 163
6.6.5 ask number()函数 163
6.6.6 pieces()函数 164
6.6.7 new board()函数 164
6.6.8 display_board()数 164
6.6.9 legal moves()函数 165
6.6.10 winner()函数 165
6.6.11 human_move()函数 166
6.6.12 computer move()函数 167
6.6.13 next_turn()函数 169
6.6.14 congrat winner()函数 169
6.6.15 main()函数 170
6.6.16 启动程序 171
6.7 小结 171
第7章 文件和异常:Trivia Challenge游戏 172
7.1 Trivia Challenge游戏简介 172
7.2 读取文本文件 173
7.2.1 Read It程序简介 173
7.2.2 文件的打开和关闭 175
7.2.3 按字符读取文件 176
7.2.4 按行读取文件 177
7.2.5 将所有行读取为一个列表 178
7.2.6 对文件进行循环遍历 178
7.3 写入文本文件 179
7.3.1 Write It程序简介 179
7.3.2 将字符串写入到文件 180
7.3.3 将字符串列表写入到文件 180
7.4 在文件中存储复杂数据 182
7.4.1 Pickle It程序简介 182
7.4.2 对数据进行Pickle处理并写入文件 182
7.4.3 读取文件中的数据并进行反Pickle处理 184
7.4.4 通过shelf保存序列化对象 185
7.4.5 通过shelf获取序列化对象 186
7.5 处理异常 187
7.5.1 Handle It程序简介 187
7.5.2 使用try语句及except子句 188
7.5.3 指定异常类型 188
7.5.4 处理多种异常 190
7.5.5 获取异常的参数 191
7.5.6 力上一个else子句 191
7.6 回到Trivia Challenge游戏 192
7.6.1 理解数据文件结构 192
7.6.2 open_file()函数 193
7.6.3 next_line()函数 194
7.6.4 next_block()函数 194
7.6.5 welcome()函数 195
7.6.6 游戏初始化设置 195
7.6.7 提出问题 195
7.6.8 获取答案 196
7.6.9 判断答案 196
7.6.10 获取下一个问题 196
7.6.11 结束游戏 196
7.6.12 启动main()函数 197
7.7 小结 197
第8章 软件对象:Critter Caretaker程序 198
8.1 Critter Caretaker程序简介 198
8.2 理解面向对象基础知识 200
8.3 创建类、方法和对象 200
8.3.1 Simple Critter程序简介 201
8.3.2 定义类 202
8.3.3 定义方法 202
8.3.4 实例化对象 203
8.3.5 调用方法 203
8.4 使用构造器 203
8.4.1 Constructor Critter程序简介 203
8.4.2 创建构造器 204
8.4.3 创建多个对象 205
8.5 使用特性 205
8.5.1 Attribute Critter程序简介 205
8.5.2 初始化特性 207
8.5.3 访问特性 208
8.5.4 打印对象 208
8.6 使用类特性和静态方法 209
8.6.1 Classy Critter程序简介 209
8.6.2 创建类特性 211
8.6.3 访问类特性 211
8.6.4 创建静态方法 212
8.6.5 调用静态方法 212
8.7 理解对象封装 213
8.8 使用私有特性和私有方法 213
8.8.1 Private Critter程序简介 214
8.8.2 创建私有特性 214
8.8.3 访问私有特性 215
8.8.4 创建私有方法 216
8.8.5 访问私有方法 216
8.8.6 尊重对象的隐私 217
8.8.7 理解何时该实现私有策略 217
8.9 控制对特性的访问 218
8.9.1 PropertyCritter程序简介 218
8.9.2 创建属性 219
8.9.3 访问属性 220
8.10 回到Critter Caretaker程序 221
8.10.1 Critter类 222
8.10.2 创建Critter 224
8.10.3 创建菜单系统 224
8.10.4 启动程序 225
8.11 小结 225
第9章 面向对象编程:Blackjack游戏 227
9.1 Blackjack游戏简介 227
9.2 发送和接收消息 228
9.2.1 Alien Blaster程序简介 228
9.2.2 发送消息 230
9.2.3 接收消息 231
9.3 组合多个对象 231
9.3.1 Playing Cards程序简介 231
9.3.2 创建Card类 232
9.3.3 创建Hand类 232
9.3.4 使用Card对象 233
9.3.5 通过Hand对象将多个Card对象组合起来 234
9.4 通过继承创建新类 235
9.5 通过继承扩展类 235
9.5.1 Playing Cards 2.0程序简介 235
9.5.2 创建一个基类 236
9.5.3 继承基类 237
9.5.4 扩展派生类 238
9.5.5 使用派生类 239
9.6 改变继承方法的行为 241
9.6.1 Playing Cards 3.0程序简介 241
9.6.2 创建基类 242
9.6.3 重写基类方法 242
9.6.4 调用基类方法 243
9.6.5 使用派生类 244
9.7 理解多态 245
9.8 创建模块 245
9.8.1 Simple Game程序简介 246
9.8.2 编写模块 246
9.8.3 引入模块 248
9.8.4 使用引入的函数和类 248
9.9 回到Blackjack游戏 249
9.9.1 cards模块 249
9.9.2 对类进行设计 251
9.9.3 为游戏循环编写伪码 252
9.9.4 引入cards和games模块 253
9.9.5 BJ_Card类 253
9.9.6 BJ_Deck类 254
9.9.7 BJ_Hantd类 254
9.9.8 BJ_Player类 256
9.9.9 BJ_Dealer类 256
9.9.10 BJ_Game类 257
9.9.11 main()函数 259
9.10 小结 260
第10章 GUI开发:Mad Lib程序 262
10.1 Mad Lib程序简介 262
10.2 详解GUI 264
10.3 理解事件驱动编程 265
10.4 使用根窗体 266
10.4.1 Simple GUI程序简介 266
10.4.2 引入tkinter 模块 268
10.4.3 创建根窗体 268
10.4.4 修整根窗体 268
10.4.5 进入根窗体的事件循环 269
10.5 使用标签 269
10.5.1 Labeler程序简介 269
10.5.2 准备工作 269
10.5.3 创建框架 270
10.5.4 创建标签 270
10.5.5 进入根窗体的事件循环 271
10.6 使用按钮 271
10.6.1 LazyButtons程序简介 271
10.6.2 准备工作 271
10.6.3 创建按钮 272
10.6.4 进入根窗体的事件循环 273
10.7 利用类创建GUI 273
10.7.1 LazyButtons 2程序简介 273
10.7.2 引入tkinter模块 273
10.7.3 定义Application类 273
10.7.4 定义构造器方法 274
10.7.5 定义一个用于创建小部件的方法 274
10.7.6 创建Application对象 275
10.8 将小部件与事件处理器绑定起来 275
10.8.1 Click Counter程序简介 275
10.8.2 准备工作 275
10.8.3 绑定事件处理器 276
10.8.4 创建事件处理器 276
10.8.5 程序收尾工作 277
10.9 使用Text和Entry小部件以及Grid布局管理器 277
10.9.1 Longevity程序简介 277
10.9.2 准备工作 278
10.9.3 利用Grid布局管理器放置小部件 278
10.9.4 创建Entry小部件 279
10.9.5 创建Text小部件 280
10.9.6 利用文本型小部件获取和插入文本 280
10.9.7 收尾工作 281
10.10 使用复选框 282
10.10.1 Movie Chooser程序简介 282
10.10.2 准备工作 282
10.10.3 使小部件的容器成为其唯一的引用 283
10.10.4 创建复选框 283
10.10.5 获取复选框的状态 285
10.10.6 收尾工作 285
10.11 使用单选框 286
10.11.1 MovieChooser2程序简介 286
10.11.2 准备工作 286
10.11.3 创建单选框 287
10.11.4 从一组单选框中获取选定值 288
10.11.5 收尾工作 289
10.12 回到Mad Lib程序 289
10.12.1 引入tkinter模块 289
10.12.2 Application类的构造器方法 289
10.12.3 Application类的create_widgets()方法 290
10.12.4 Application类的tell_story()方法 292
10.12.5 程序的主体部分 293
10.13 小结 293
第11章 图形图像:Plzza Panic游戏 294
11.1 Pizza Panic游戏简介 294
11.2 pygame和livewires简介 296
11.3 创建图形窗口 296
11.3.1 New Graphics Window程序简介 297
11.3.2 引入games模块 297
11.3.3 初始化图形屏幕 298
11.3.4 启动主循环 298
11.4 设置背景图片 299
11.4.1 Background Image程序简介 299
11.4.2 加载图片 300
11.4.3 设置背景 301
11.5 理解图形坐标系统 301
11.6 显示sprite 302
11.6.1 Pizza Sprite程序简介 303
11.6.2 为sprite加载图片 304
11.6.3 创建sprite 305
11.6.4 把sprite放到屏幕上面去 305
11.7 显示文本 307
11.7.1 Big Score程序简介 307
11.7.2 引入color模块 308
11.7.3 创建Text对象 308
11.7.4 向屏幕添加Text对象 309
11.8 显示消息 309
11.8.1 YouWon程序简介 309
11.8.2 引入color模块 311
11.8.3 创建Message对象 311
11.8.4 使用屏幕的高度和宽度 312
11.8.5 把Message对象放到屏幕上面去 312
11.9 移动sprite 312
11.9.1 Moving Pizza程序简介 312
11.9.2 设置sprite的速度值 314
11.10 处理屏幕边界 314
11.10.1 Bouncing Pizza程序简介 314
11.10.2 准备工作 315
11.10.3 从Sprite派生出…个新类 315
11.10.4 重写update()方法 316
11.10.5 收尾工作 316
11.11 处理鼠标输入 317
11.11.1 MovingPan程序简介 317
11.11.2 准备工作 318
11.11.3 读取鼠标的x和y坐标 318
11.11.4 设置鼠标光标的可见性 319
11.11.5 捕获图形屏幕中的输入 319
11.11.6 收尾工作 320
11.12 碰撞检测 320
11.12.1 Slippery Pizza程序简介 320
11.12.2 准备工作 322
11.12.3 碰撞检测 322
11.12.4 碰撞处理 322
11.12.5 收尾工作 323
11.13 回到Pizza Panic游戏 324
11.13.1 准备工作 324
11.13.2 Pan类 324
11.13.3 Pizza类 326
11.13.4 Chef类 328
11.13.5 main()函数 329
11.14 小结 330
第12章 声音、动画以及程序开发:Astrocrash游戏 332
12.1 Astrocrash游戏简介 332
12.2 读取键盘 334
12.2.1 Read Key程序简介 334
12.2.2 准备工作 334
12.2.3 按键判断 335
12.2.4 收尾工作 336
12.3 旋转sprite 336
12.3.1 Rotate Sprite程序简介 336
12.3.2 使用Sprite的angle属性 338
12.4 创建动画 339
12.4.1 Explosion程序简介 339
12.4.2 爆炸图片说明 339
12.4.3 准备工作 340
12.4.4 创建图片文件列表 340
12.4.5 创建Animation对象 341
12.5 播放声音和音乐 342
12.5.1 Sound and Music程序简介 342
12.5.2 操作声音 342
12.5.3 操作音乐 345
12.5.4 收尾工作 346
12.6 规划Astroorash游戏 346
12.6.1 游戏的功能 347
12.6.2 游戏的类 347
12.6.3 游戏的资源 348
12.7 创建小行星 348
12.7.1 Astrocrash01程序简介 348
12.7.2 准备工作 349
12.7.3 Asteroid类 349
12.7.4 main()函数 351
12.8 旋转飞船 351
12.8.1 Astrocrash02程序简介 351
12.8.2 Ship类 352
12.8.3 实例化Ship对象 353
12.9 移动飞船 353
12.9.1 Astrocrash03程序简介 353
12.9.2 引入math模块 354
12.9.3 为Ship类添加类变量和常量 354
12.9.4 修改Ship的update()方法 354
12.10 发射导弹 355
12.10.1 Astrocrash04程序简介 356
12.10.2 修改Ship的update()方法 356
12.10.3 Missile类 357
12.11 控制导弹发射的频率 359
12.11.1 Astrocrash05程序简介 359
12.11.2 为Ship类添加一个类常量 360
12.11.3 为Ship类创建构造器方法 360
12.11.4 修改Ship类的update()方法 360
12.12 处理碰撞 361
12.12.1 Astrocrash06程序简介 361
12.12.2 修改Missile类的update()方法 362
12.12.3 为Missile类添加die()方法 362
12.12.4 修改Ship类的update()方法 362
12.12.5 为Ship类添加die()方法 362
12.12.6 为Asteroid类添加一个类常量 363
12.12.7 为Asteroid类添加die()方法 363
12.13 添加爆炸效果 363
12.13.1 Astrocrash07程序简介 363
12.13.2 Wrapper类 364
12.13.3 Collider类 365
12.13.4 修改Asteroid类 366
12.13.5 修改Ship类 366
12.13.6 修改Missile类 367
12.13.7 Explosion类 367
12.14 添加难度级别、得分记录以及背景音乐 368
12.14.1 Astrocrash08程序简介 368
12.14.2 引入color模块 369
12.14.3 Game类 369
12.14.4 为Asteroid类添加类变量和类常量 373
12.14.5 修改Asteroid类的构造器方法 373
12.14.6 修改Asteroid类的die()方法 374
12.14.7 为Ship类添加类常量 374
12.14.8 修改Ship类的构造器方法 375
12.14.9 修改Ship类的update()方法 375
12.14.10 为Ship类添加die()方法 375
12.14.11 main()函数 375
12.15 小结 376
附录A 配套网站 377
附录B livewires参考 379