图书介绍
Python实战编程 从零学Pythonpdf电子书版本下载
- 黑马程序员编著 著
- 出版社: 北京:中国铁道出版社
- ISBN:9787113240073
- 出版时间:2018
- 标注页数:661页
- 文件大小:89MB
- 文件页数:681页
- 主题词:软件工具-程序设计
PDF下载
下载说明
Python实战编程 从零学PythonPDF格式电子书版下载
下载的文件为RAR压缩包。需要使用解压软件进行解压得到PDF格式图书。建议使用BT下载工具Free Download Manager进行下载,简称FDM(免费,没有广告,支持多平台)。本站资源全部打包为BT种子。所以需要使用专业的BT下载软件进行下载。如 BitComet qBittorrent uTorrent等BT下载工具。迅雷目前由于本站不是热门资源。不推荐使用!后期资源热门了。安装了迅雷也可以迅雷进行下载!
(文件页数 要大于 标注页数,上中下等多册电子书除外)
注意:本站所有压缩包均有解压码: 点击下载压缩包解压工具
图书目录
第1章 开启Python学习之旅 1
1.1 Python的由来 1
1.2 Python的特点 2
1.2.1 简单易学 2
1.2.2 开源 2
1.2.3 高级语言 2
1.2.4 可移植性 2
1.2.5 解释型 2
1.2.6 面向对象 3
1.2.7 可扩展性和可嵌入性 3
1.2.8 丰富的库 3
1.2.9 规范的代码 3
1.3 Python应用领域 3
1.3.1 Web应用开发 3
1.3.2 管理操作系统、服务器自动化运行和维护 4
1.3.3 科学计算 4
1.3.4 桌面软件 4
1.3.5 服务器软件(网络软件) 4
1.3.6 游戏 4
1.3.7 构思实现,产品早期原型和迭代 4
1.4 Python版本及解释器 5
1.4.1 Python的版本过渡 5
1.4.2 Python 2和Python 3的区别 6
1.4.3 Python解释器 9
1.5 下载和安装Python 9
1.5.1 Linux平台 9
1.5.2 Windows平台 10
1.5.3 Mac平台 13
1.6 第一个Python程序——HelloWorld 14
1.6.1 Python命令行 14
1.6.2 写一段小程序 14
1.6.3 脚本 14
1.7 运行Python 15
1.7.1 命令行上的交互式解释器 15
1.7.2 从命令行启动脚本 16
1.7.3 增强交互式IPython 16
1.7.4 集成开发环境 17
1.7.5 PyCharm的下载安装 18
1.7.6 PyCharm的使用 20
1.8 Python程序执行原理 24
1.8.1 编译型语言和解释型语言 24
1.8.2 Python是一种解释型语言 24
1.9 Python文档 25
第2章 Python快速入门 26
2.1 程序的输出和输入 26
2.1.1 程序的输出 26
2.1.2 程序的输入 27
2.2 Python注释 27
2.2.1 行注释和块注释 28
2.2.2 文档字符串 28
2.3 代码风格建议 28
2.3.1 使用缩进表示语句块 28
2.3.2 关于缩进风格 29
2.3.3 代码过长的换行 29
2.4 标识符和关键字 29
2.4.1 标识符 29
2.4.2 关键字 30
2.5 变量 30
2.5.1 变量和赋值 30
2.5.2 复用变量名 31
2.6 数字类型 32
2.7 布尔类型 32
2.8 字符串 33
2.9 元组和列表 33
2.10 字典 34
2.11 集合(set) 34
2.12 if语句 35
2.13 while循环 36
2.14 for循环 37
2.15 可迭代对象 38
2.16 文件读写 38
2.17 错误和异常 39
2.18 函数 40
2.19 类和对象 40
2.20 模块 41
第3章 数值类型 42
3.1 整型 42
3.1.1 早期的整型 42
3.1.2 Python 3中的整型 42
3.1.3 整型的表示方法 43
3.1.4 进制转换 43
3.2 位运算 44
3.2.1 整型存储方式 44
3.2.2 按位取反 45
3.2.3 按位左移 45
3.2.4 按位右移 46
3.2.5 按位与 47
3.2.6 按位或 48
3.2.7 按位异或 48
3.3 浮点型 48
3.3.1 浮点型的表示方式 48
3.3.2 浮点数的取值范围 49
3.3.3 浮点数的存储 49
3.3.4 高精度浮点数 49
3.4 复数类型 50
3.4.1 复数类型定义 50
3.4.2 复数的特点 50
3.4.3 创建复数 50
3.4.4 获取复数的实部和虚部 51
3.5 布尔类型 51
3.6 数字运算 51
3.6.1 算术运算符 51
3.6.2 赋值运算符 53
3.6.3 比较运算符 53
3.6.4 逻辑运算符 54
3.7 运算符优先级 55
3.8 类型转换 56
3.8.1 类型转换函数 56
3.8.2 类型转换注意事项 56
3.8.3 类型转换示例 57
3.9 对象和引用 57
3.9.1 对象 57
3.9.2 引用 58
3.9.3 身份运算符 59
3.9.4 身份运算符的使用 59
第4章 字符串 60
4.1 字符串介绍 60
4.2 字符串存储方式 61
4.2.1 字符串的索引 61
4.2.2 根据索引访问值 62
4.2.3 字符串是不可变的 62
4.3 切片截取字符串 63
4.3.1 切片和步长 63
4.3.2 切片的默认值 64
4.3.3 切片的正反向索引混用 64
4.4 特殊字符处理 65
4.4.1 字符串的转义 65
4.4.2 保持原始字符串 66
4.5 字符串的输出和输入 66
4.5.1 字符串的格式化输出 66
4.5.2 格式化操作的辅助指令 67
4.5.3 字符串的输入 68
4.6 字符串模板 69
4.7 字符串的内建函数 70
4.7.1 序列类型操作相关函数 70
4.7.2 字符串类型转换相关函数 71
4.8 字符串的常见方法 72
4.8.1 find方法 74
4.8.2 index方法 75
4.8.3 replace方法 75
4.8.4 split方法 75
4.8.5 lower方法 76
4.8.6 strip方法 76
4.8.7 format方法 76
4.9 字符串操作符 78
4.9.1 使用比较运算符比较字符串 78
4.9.2 使用+运算符连接字符串 79
4.9.3 使用成员运算符检查字符串 80
第5章 序列 81
5.1 认识什么是序列 81
5.2 通用序列操作 82
5.2.1 索引([]) 82
5.2.2 切片([i:j]) 82
5.2.3 步长([i:j:k]) 83
5.2.4 判断某个元素是否属于序列 84
5.2.5 序列相加 85
5.2.6 序列与数字相乘 85
5.2.7 计算序列长度 85
5.2.8 找出序列的最大元素和最小元素 85
5.2.9 查找元素在序列中出现的位置 86
5.2.10 统计元素在序列中出现的次数 86
5.3 可变序列——列表(list) 86
5.3.1 什么是列表 86
5.3.2 列表的创建方式 87
5.3.3 列表操作符 88
5.3.4 列表类型相关函数 90
5.3.5 列表类型相关方法 91
5.4 不可变序列——元组 95
5.4.1 元组的创建方式 96
5.4.2 元组支持通用序列操作 96
5.4.3 单个元素的元组 97
5.4.4 有时候元组也“可变” 97
5.5 元组是无符号对象的默认类型 98
5.6 不同序列的相互转换 98
5.7 不可变序列——range 99
5.7.1 range介绍 99
5.7.2 range支持通用序列操作 100
5.7.3 range与列表和元组的比较 101
第6章 流程控制 102
6.1 if语句 102
6.1.1 简单if语句 102
6.1.2 条件表达式 103
6.1.3 多重条件表达式 103
6.1.4 if-else语句 104
6.1.5 elif语句 104
6.1.6 if嵌套语句 106
6.1.7 if语句的缩进 107
6.1.8 判断表达式 107
6.2 循环语句 108
6.2.1 while循环 108
6.2.2 while循环嵌套 109
6.2.3 死循环 110
6.2.4 for语句 110
6.2.5 range函数用于for循环 111
6.2.6 循环技巧 111
6.2.7 迭代器和iter()函数 113
6.2.8 列表推导式 114
6.3 跳出循环 114
6.3.1 break语句 114
6.3.2 continue语句 115
6.3.3 pass语句 116
6.3.4 else语句 116
第7章 字典和集合 118
7.1 字典类型 118
7.1.1 字典的基本概念 118
7.1.2 字典是可变的容器 119
7.1.3 字典键和值的规范 119
7.2 字典的基本操作 120
7.2.1 创建字典并为元素赋值 120
7.2.2 访问字典中的元素 121
7.2.3 遍历字典中的元素 122
7.2.4 更新字典中的元素 123
7.2.5 删除字典元素和字典 123
7.3 字典常用的函数 124
7.3.1 通过len函数获取字典元素的数量 124
7.3.2 通过hash函数判断某个对象是否能为字典的键 124
7.4 字典的内建方法 124
7.4.1 copy方法 125
7.4.2 get方法 126
7.4.3 items方法 127
7.4.4 keys方法 127
7.4.5 values方法 128
7.5 集合类型 128
7.5.1 集合的基本概念 128
7.5.2 集合的类型 129
7.6 集合的基本操作 130
7.6.1 集合的创建和赋值 130
7.6.2 访问集合中的元素 130
7.6.3 更新集合中的元素 131
7.6.4 删除集合本身 132
7.7 集合操作符 133
7.7.1 标准类型的操作符 133
7.7.2 集合类型的操作符 134
7.7.3 可变集合类型的操作符 135
7.8 集合内建方法 136
第8章 函数和函数式编程 138
8.1 认识函数 138
8.2 函数的定义和调用 139
8.2.1 函数的定义 139
8.2.2 函数的调用 139
8.2.3 函数文档说明 140
8.2.4 形参和实参 141
8.2.5 传递参数值的改变 141
8.2.6 return语句 141
8.2.7 返回值的类型 142
8.3 函数的参数传递 143
8.3.1 位置参数传递 143
8.3.2 关键字参数传递 143
8.3.3 参数默认值 144
8.3.4 可变参数 144
8.3.5 解包裹 145
8.3.6 混合传递方式 146
8.4 递归函数 147
8.5 函数作为参数传递 148
8.6 lambda匿名函数 148
8.7 常用函数 149
8.7.1 map函数 149
8.7.2 filter函数 150
8.7.3 reduce函数 151
8.8 变量作用域 152
8.8.1 全局变量和局部变量 152
8.8.2 global和nonlocal关键字 153
8.9 闭包 155
8.9.1 函数的引用 155
8.9.2 什么是闭包 156
8.9.3 闭包的使用 156
8.10 装饰器 157
8.10.1 什么是装饰器 157
8.10.2 多个装饰器 159
8.10.3 装饰器对有参数函数进行装饰 160
8.10.4 装饰器对带有返回值的函数进行装饰 162
8.10.5 通用装饰器 163
8.10.6 带有参数的装饰器 164
8.11 生成器 165
8.11.1 什么是生成器 165
8.11.2 生成器运行机制 166
8.11.3 yield与return 167
8.11.4 生成器支持的方法 168
8.11.5 生成器应用场景——协程 170
8.11.6 生成器是一个迭代器 171
8.12 Python标准库——内置函数 172
8.12.1 反过头看看 172
8.12.2 数字运算相关函数 173
8.12.3 类型转换相关函数 177
8.12.4 序列操作相关函数 179
8.12.5 类、对象、属性相关函数 180
8.12.6 编译,执行相关函数 183
8.12.7 其他函数 186
第9章 文件 188
9.1 文件的打开和关闭 188
9.1.1 打开文件 188
9.1.2 关闭文件 188
9.2 文件概述 189
9.2.1 路径名 189
9.2.2 打开模式 189
9.2.3 文件缓冲 190
9.2.4 文件的分类 191
9.2.5 标准文件 191
9.3 文件的读写 192
9.3.1 写文件 192
9.3.2 读文件 192
9.3.3 文件读写位置 193
9.4 文件的方法和属性 195
9.5 文件遍历 195
9.5.1 read()遍历文件 195
9.5.2 readline()遍历文件 196
9.5.3 readlines()遍历文件 197
9.5.4 文件迭代器 197
9.5.5 文件迭代器的特点 198
9.6 文件备份 198
9.7 文件重命名 199
9.8 删除文件 199
9.9 os模块扩展 200
9.9.1 创建文件夹 200
9.9.2 删除文件夹 200
9.9.3 获取当前目录 200
9.9.4 更改默认目录 200
9.9.5 获取目录列表 201
9.10 文件操作案例——用户登录 201
9.10.1 业务逻辑 201
9.10.2 相关文件 202
9.10.3 模块功能 202
9.10.4 功能实现 202
9.10.5 功能演示 206
第10章 面向对象(上) 208
10.1 面向对象的概念 208
10.2 类和对象 210
10.3 类的定义和使用 210
10.3.1 类的定义 210
10.3.2 创建对象 211
10.3.3 新式类和经典类 211
10.4 属性和方法 211
10.4.1 类属性 211
10.4.2 对象属性 212
10.4.3 构造方法和析构方法 214
10.4.4 对象方法 215
10.4.5 类方法 217
10.4.6 静态方法 218
10.4.7 保护对象的私有属性 219
10.4.8 更便捷地访问私有属性——使用@properry 220
第11章 面向对象(下) 223
11.1 面向对象的三大特征 223
11.2 封装 224
11.3 继承 224
11.3.1 单继承 224
11.3.2 isinstance()和issubclass()函数 226
11.3.3 多继承 227
11.3.4 重写 229
11.3.5 super关键字 229
11.4 多态 230
11.5 运算符重载 231
11.5.1 四则运算重载 232
11.5.2 索引和分片重载 233
11.5.3 定制对象的字符串形式 234
11.6 _new_方法 235
11.7 单例模式 236
11.8 工厂模式 238
第12章 错误和异常 240
12.1 错误和异常简介 240
12.1.1 异常 241
12.1.2 Python常见异常 241
12.2 捕获异常 243
12.2.1 try-except语句 243
12.2.2 获取异常提示信息 244
12.2.3 捕获多个异常 244
12.2.4 捕获所有异常 245
12.2.5 else子句 246
12.2.6 finally子句 246
12.3 抛出异常 247
12.3.1 raise语句 247
12.3.2 异常的传递 249
12.3.3 assert断言语句 250
12.4 自定义异常 251
12.5 with语句处理异常 253
12.5.1 with语句 253
12.5.2 上下文管理器 254
12.5.3 自定义上下文管理器 255
第13章 模块 257
13.1 什么叫模块 257
13.2 常用标准模块 257
13.2.1 sys模块 257
13.2.2 os模块 258
13.2.3 os.path模块 259
13.2.4 random模块 260
13.2.5 time模块 260
13.3 导入模块 262
13.3.1 import 262
13.3.2 from…impor… 262
13.3.3 from…import★ 263
13.4 导入方法比较 263
13.5 自制模块 263
13.5.1 制作自定义模块 263
13.5.2 自定义模块的使用 263
13.5.3 模块搜索路径 264
13.6 模块属性 264
13.6.1 _all_属性 264
13.6.2 _name_属性 266
13.7 模块导入特性 266
13.7.1 导入特性概述 266
13.7.2 导入特性详解 267
13.8 模块缓存 267
13.9 Python中的包 268
13.10 包的导入 268
13.10.1 import导入 268
13.10.2 from…import…导入 268
13.10.3 _init_.py文件 269
13.11 模块的打包发布 269
13.11.1 待发布包结构 270
13.11.2 setup.py文件 270
13.11.3 模块构建 270
13.11.4 模块打包 271
13.12 模块安装 272
第14章 内存管理 273
14.1 内存管理概述 273
14.1.1 为什么要进行内存管理 273
14.1.2 内存管理的常用机制 273
14.2 引用计数机制 274
14.2.1 引用计数机制概述 274
14.2.2 增加对象的引用 275
14.2.3 减少对象的引用 276
14.2.4 释放对象占用的内存 276
14.3 容器对象引起的循环引用 277
14.3.1 容器对象引用对象 277
14.3.2 对象之间的循环引用 277
14.4 弱引用解决自定义对象的循环引用 279
14.4.1 弱引用概述 279
14.4.2 弱引用处理循环引用 281
14.5 垃圾回收机制 281
14.5.1 垃圾回收机制概述 282
14.5.2 标记清除技术 282
14.5.3 分代回收技术 283
14.5.4 gc模块概述 284
14.5.5 启动垃圾回收的场景 284
14.5.6 gc模块自动回收垃圾 285
14.6 内存池机制 286
14.6.1 小整数对象池 286
14.6.2 字符串的intern机制 287
第15章 正则表达式 288
15.1 起源与发展 288
15.2 正则表达式的定义 289
15.3 字符分类 289
15.3.1 普通字符 289
15.3.2 元字符 289
15.3.3 预定义字符集 290
15.4 点字符 290
15.5 位置匹配 290
15.5.1 行头行尾 291
15.5.2 单词边界 291
15.6 多选结构 291
15.7 字符组 291
15.7.1 连字符 292
15.7.2 排除型字符组 292
15.7.3 元字符与字符组 292
15.8 重复匹配 293
15.8.1 可选模式 293
15.8.2 重复模式 293
15.9 转义字符 293
15.10 子组 294
15.10.1 子组的意义 294
15.10.2 非捕获子组 295
15.11 re模块 295
15.12 预编译 296
15.13 匹配与搜索 296
15.13.1 match() 296
15.13.2 search() 297
15.14 匹配对象 298
15.15 全文匹配 299
15.15.1 findall() 299
15.15.2 finditer() 300
15.16 检索替换 300
15.17 文本分割 301
15.18 贪婪匹配 301
第16章 图形用户界面编程 303
16.1 Tkinter概述 303
16.1.1 认识Tkinter 303
16.1.2 开发第一个Tkinter程序 303
16.2 Tkinter组件概述 304
16.2.1 Tkinter核心组件 304
16.2.2 标准组件属性 305
16.2.3 组件的属性设置 308
16.3 常用组件介绍 309
16.3.1 按钮组件(Button) 309
16.3.2 标签组件(Label) 310
16.3.3 文本框(Entry) 310
16.3.4 多行文本框(Text) 311
16.3.5 单选按钮(Radiobutton) 312
16.3.6 复选框(Checkbutton) 314
16.3.7 列表框(Listbox) 315
16.4 菜单 316
16.4.1 主菜单 316
16.4.2 下拉菜单 316
16.4.3 弹出式菜单 317
16.5 对话框 318
16.5.1 消息对话框(messagebox) 318
16.5.2 文件对话框(filedialog) 318
16.5.3 颜色选择对话框(colorchooser) 319
16.6 画布绘图 320
16.7 Tkinter几何布局管理器 322
16.7.1 pack几何布局管理器 322
16.7.2 grid几何布局管理器 323
16.7.3 place几何布局管理器 323
16.8 事件处理 324
16.8.1 Tkinter中的事件 324
16.8.2 事件对象及属性 325
16.9 其他GUI 327
16.9.1 wxPython 327
16.9.2 PyGTK 327
16.9.3 PyQt 328
16.9.4 JPython 328
第17章 多任务编程 329
17.1 多任务的实现原理 329
17.2 进程介绍 330
17.2.1 什么是进程 330
17.2.2 进程的状态 331
17.3 通过fork()函数创建进程 331
17.3.1 使用fork()函数创建子进程 332
17.3.2 使用fork()函数创建多个子进程 333
17.4 通过Process类创建进程(跨平台) 334
17.4.1 通过Process类实例创建进程 334
17.4.2 使用join()方法同步进程 335
17.4.3 通过Process子类创建子进程 337
17.5 进程池批量创建进程 338
17.5.1 进程池非阻塞式添加任务 338
17.5.2 进程池阻塞式添加任务 340
17.6 通过subprocess模块创建进程 341
17.6.1 调用call()函数创建子进程 342
17.6.2 通过Popen类实例创建子进程 342
17.7 通过Queue实现进程间的通信 344
17.7.1 全局变量在多个进程中不共享 344
17.7.2 使用Queue队列实现进程间通信 344
17.8 线程介绍 345
17.8.1 什么是线程 346
17.8.2 线程的状态 346
17.8.3 线程类型 346
17.9 创建线程 347
17.9.1 使用Thread类实现多线程 347
17.9.2 使用Thread子类实现多线程 349
17.9.3 调用join()方法阻塞线程 349
17.10 解决线程共享资源产生的问题 350
17.10.1 线程共享全局变量 350
17.10.2 访问全局变量出现数据不同步的问题 351
17.10.3 通过互斥锁(Lock)解决数据不同步的问题 352
17.10.4 持有多个锁造成死锁的问题 353
17.10.5 可重入锁(RLock)的使用 355
17.11 线程的同步应用 356
17.11.1 通过条件变量(Condition)实现线程同步 357
17.11.2 使用队列实现线程同步 358
17.12 使用事件(Event)实现线程通信 361
17.13 后台线程 362
17.14 协程 363
17.14.1 协程的优势 363
17.14.2 Python 2.x的协程 363
17.14.3 Python 3.x的协程 364
第18章 网络编程 366
18.1 计算机网络概述 366
18.2 协议与体系结构 367
18.2.1 体系结构 367
18.2.2 协议 368
18.2.3 数据传输流程 369
18.3 网络架构 370
18.4 IP地址 370
18.4.1 IPv4的分类 371
18.4.2 IPv6地址 372
18.4.3 子网掩码 373
18.5 端口号 373
18.6 网络编程概述 374
18.7 套接字 374
18.8 socket通信流程 375
18.8.1 面向连接的通信 375
18.8.2 面向非连接的通信 376
18.9 socket内建方法 376
18.9.1 bind——绑定地址到套接字 376
18.9.2 listen——服务器监听客户端的请求 377
18.9.3 connect——建立与服务器的连接 377
18.9.4 accept——接受客户端的连接 377
18.9.5 send/sendto——发送数据 378
18.9.6 recv/recvfrom——接收数据 378
18.9.7 close——关闭套接字 379
18.10 网络编程实例 379
18.10.1 UDP聊天室 379
18.10.2 TCP数据转换 382
18.11 TCP并发服务器 384
18.11.1 单进程非阻塞服务器 384
18.11.2 多进程并发服务器 387
18.11.3 多线程并发服务器 389
18.12 I/O多路转接服务器 390
18.12.1 select并发服务器 390
18.12.2 epoll并发服务器 393
第19章 数据库编程 397
19.1 MySQL数据库 397
19.1.1 下载和安装 398
19.1.2 使用MySQLWorkbench 408
19.1.3 卸载MySQL 409
19.2 SQL语言 412
19.3 数据库基本操作 412
19.3.1 创建数据库 413
19.3.2 删除数据库 413
19.4 表的基本操作 414
19.4.1 字段类型 414
19.4.2 约束 415
19.4.3 创建表 415
19.4.4 删除表 416
19.5 数据的操作 417
19.5.1 数据的添加 417
19.5.2 数据的更新 417
19.5.3 数据的删除 418
19.5.4 事务 418
19.6 单表查询 419
19.6.1 数据查询 419
19.6.2 最简单查询 420
19.6.3 条件查询 420
19.6.4 查询不重复的记录 424
19.6.5 聚合查询 424
19.6.6 分组查询 425
19.6.7 排序 426
19.6.8 限制记录数量 426
19.6.9 完整的SQL语句 427
19.7 多表查询 427
19.7.1 内连接(inner join) 428
19.7.2 外连接(outer join) 428
19.8 MySQL的内置函数 429
19.8.1 字符串函数 429
19.8.2 数学函数 431
19.8.3 日期时间函数 432
19.8.4 类型转换函数 434
19.9 MySQL与Python交互 434
19.9.1 安装PyMySQL 435
19.9.2 PyMySQL的常用对象 435
19.9.3 PyMySQL示例 436
第20章 Web编程 438
20.1 什么是Web服务器 438
20.2 第一个Web服务器 438
20.3 统一资源定位符 439
20.4 HTTP概述 440
20.5 HTTP消息 440
20.5.1 请求结构 440
20.5.2 响应结构 441
20.5.3 HTTP请求方法 441
20.5.4 状态码 442
20.6 HTML概述 442
20.6.1 静态网页 443
20.6.2 CSS简介 443
20.6.3 JavaScript简介 444
20.7 静态Web服务器 445
20.8 WSGI规范 448
20.9 WSGI服务器 449
20.10 Web服务器 452
20.11 基于框架的服务器 454
20.11.1 Web应用框架 455
20.11.2 基于框架的服务器 456
20.11.3 流程分析 458
20.11.4 功能展示 459
第21章 井字棋 460
21.1 游戏简介 460
21.1.1 游戏规则 460
21.1.2 游戏策略 460
21.2 分析与设计 461
21.2.1 流程分析 462
21.2.2 类的设计 463
21.2.3 开发阶段设计 463
21.3 新建项目及文件准备 464
21.4 棋盘功能实现 464
21.4.1 棋盘的数据结构 465
21.4.2 初始化棋盘 466
21.4.3 显示棋盘 466
21.4.4 在棋盘上落子 467
21.4.5 判断平局 468
21.4.6 判断胜利 469
21.4.7 重置棋盘 469
21.5 玩家功能实现 470
21.5.1 初始化玩家 470
21.5.2 玩家在棋盘落子 471
21.6 人人对战功能实现 472
21.6.1 游戏的初始化 472
21.6.2 随机决定先手玩家 472
21.6.3 一轮完整对局 473
21.6.4 循环对局 474
21.7 人机对战——计算机随机落子 475
21.7.1 派生AIPlayer子类 475
21.7.2 修改游戏类中计算机玩家的类型 476
21.8 人机对战——计算机智能落子 476
21.8.1 计算机落子策略 476
21.8.2 预判胜利 476
21.8.3 必胜落子和必救落子 478
21.8.4 评估子力价值 478
21.9 项目体会 480
第22章 贪吃蛇 481
22.1 游戏简介 481
22.1.1 简易版贪吃蛇 481
22.1.2 游戏规则 482
22.2 类和模块的设计 483
22.2.1 类的设计 483
22.2.2 模块的设计 484
22.3 游戏准备工作 484
22.3.1 新建项目 484
22.3.2 安装pygame库 485
22.4 游戏框架搭建 487
22.4.1 pygame初始化和退出 487
22.4.2 创建游戏主窗口 488
22.4.3 增加游戏循环和游戏时钟 489
22.4.4 填充窗口的背景颜色 490
22.4.5 绘制得分文本 492
22.4.6 重置得分文本的位置 494
22.4.7 游戏事件监听 498
22.4.8 绘制食物图形 501
22.4.9 定时更新食物的位置 504
22.5 贪吃蛇功能实现 505
22.5.1 贪吃蛇类的设计 505
22.5.2 定义贪吃蛇类 507
22.5.3 添加蛇身体 508
22.5.4 绘制和移动身体 510
22.5.5 改变贪吃蛇的方向 512
22.5.6 贪吃蛇吃食物 513
22.5.7 贪吃蛇的死亡 515
22.6 项目体会 517
第23章 飞机大战 518
23.1 游戏简介 518
23.1.1 经典飞机大战 518
23.1.2 增强版飞机大战游戏特点 519
23.1.3 增强版飞机大战游戏设计 519
23.1.4 增强版飞机大战典型场景 522
23.2 项目准备 524
23.2.1 类设计 524
23.2.2 模块设计 525
23.2.3 创建项目和项目文件结构 526
23.3 游戏框架的设计与搭建 526
23.3.1 游戏类的设计 526
23.3.2 游戏框架搭建 528
23.4 精灵和精灵组 530
23.4.1 介绍Sprite和Group 530
23.4.2 派生游戏精灵子类 532
23.4.3 绘制游戏背景和英雄飞机 533
23.4.4 实现游戏背景连续滚动 535
23.5 指示器面板 537
23.5.1 指示器面板类的设计 538
23.5.2 指示器面板类的准备 539
23.5.3 使用精灵实现文本标签 542
23.5.4 显示和修改游戏数据 544
23.5.5 保存和显示最好成绩 548
23.5.6 显示游戏状态 550
23.5.7 游戏结束后重置面板 552
23.6 逐帧动画和飞机类 553
23.6.1 逐帧动画的基本实现 554
23.6.2 飞机类的设计与实现 557
23.6.3 派生敌机子类 561
23.6.4 派生英雄飞机子类 567
23.7 碰撞检测 573
23.7.1 pygame中的碰撞检测 573
23.7.2 敌机撞毁英雄 576
23.7.3 英雄发射子弹 579
23.7.4 英雄拾取道具 582
23.8 音乐和音效 586
23.8.1 pygame播放音乐和音效的方式 586
23.8.2 设计并实现音乐播放器类 587
23.9 项目体会 591
第24章 多人聊天室 592
24.1 项目介绍 592
24.1.1 项目概述 592
24.1.2 项目预览 593
24.1.3 项目的总体流程 594
24.2 服务器端程序设计 595
24.2.1 业务流程设计 595
24.2.2 响应协议设计 596
24.2.3 类和模块设计 597
24.2.4 数据库设计 597
24.3 服务器端程序实现 598
24.3.1 创建项目和文件结构 598
24.3.2 实现ServerSocket类 598
24.3.3 实现SocketWrapper类 599
24.3.4 实现DB类 599
24.3.5 实现ResponseProtocol类 600
24.3.6 实现Server类——主框架搭建 601
24.3.7 实现Server类——请求处理 602
24.3.8 实现Server类——请求协议与处理方法的对应关系 603
24.3.9 启动服务器端程序 606
24.4 客户端程序设计 606
24.4.1 业务流程设计 606
24.4.2 请求协议设计 607
24.4.3 类和模块设计 607
24.5 客户端程序实现 608
24.5.1 创建项目和文件结构 608
24.5.2 搭建登录窗口 608
24.5.3 搭建聊天窗口 611
24.5.4 实现RequestProtocol类 613
24.5.5 实现ClientSocket类 614
24.5.6 实现Client类——业务框架搭建 614
24.5.7 实现Client类——响应处理方法 615
24.5.8 实现Client类——窗口按钮单击事件处理 618
24.5.9 启动客户器端程序 619
24.6 项目体会 619
第25章 大型购物网站——天天生鲜 620
25.1 Django框架介绍 620
25.1.1 使用Django建立网站的优势 620
25.1.2 Django框架的结构 621
25.2 天天生鲜项目展示 621
25.2.1 首页商品展示页面 621
25.2.2 商品分类展示页面 622
25.2.3 商品详情页面 623
25.2.4 购物车页面 623
25.2.5 订单提交页面 624
25.2.6 订单提交成功页面 624
25.3 项目创建 625
25.3.1 搭建开发环境 625
25.3.2 创建项目 625
25.3.3 创建应用 626
25.3.4 开发服务器 627
25.4 创建模型 627
25.4.1 ORM概述 627
25.4.2 数据库配置 628
25.4.3 定义模型类 629
25.4.4 创建迁移文件 632
25.4.5 执行迁移 633
25.4.6 数据库操作 634
25.5 创建视图 638
25.5.1 定义视图 638
25.5.2 配置URLconf 638
25.6 模板渲染 639
25.6.1 配置模板 640
25.6.2 使用模板 640
25.6.3 给模板传值 641
25.6.4 静态文件 642
25.7 Cookie 643
25.8 首页页面功能实现 644
25.8.1 创建视图函数 644
25.8.2 创建模板文件 645
25.8.3 配置访问路径 648
25.9 商品详细页面功能实现 648
25.9.1 创建视图函数 648
25.9.2 创建模板文件 649
25.9.3 配置访问路径 650
25.9.4 实现商品购买功能 650
25.10 商品分类页面功能实现 651
25.10.1 创建视图函数 651
25.10.2 创建模板文件 653
25.10.3 配置访问路径 654
25.11 购物车页面功能实现 654
25.11.1 创建视图函数 655
25.11.2 创建模板文件 655
25.11.3 配置访问路径 656
25.11.4 实现删除商品的功能 656
25.12 订单提交页面功能实现 657
25.12.1 创建视图函数 657
25.12.2 创建模板文件 657
25.12.3 配置访问路径 659
25.12.4 实现提交订单功能 659
25.13 订单提交成功页面功能实现 660
25.13.1 创建视图函数 660
25.13.2 配置访问路径 661
25.14 项目体会 661