《Python实战编程 从零学Python》PDF下载

  • 购买积分:19 如何计算积分?
  • 作  者:黑马程序员编著
  • 出 版 社:北京:中国铁道出版社
  • 出版年份:2018
  • ISBN:9787113240073
  • 页数:661 页
图书介绍:本书涵盖了Python开发的核心知识,其中,第1-11章主要讲解的是Python语法,包括基本概念和语句、风格和语法、数据类型、序列类型、映射和集合类型、条件和循环、文件、错误和异常、函数和函数式编程、模块等;第12-13章讲解的是面向对象编程;第14-20章,讲解的是高阶内容,如内存管理、正则表达式、网络、多线程、图形图形界面,数据库、web等;第21-25章,分别通过飞机大战、贪吃蛇、井字棋、用户在线登录服务器、FTP服务器这5个项目,全面巩固前面所学知识。如果读者能结合前面章节数以百计的代码片段、交互实例,相信一定可以加强Python技能的实用练习。本书适合Python初学者以及已经入门但想继续学习和提高自身Python技巧的程序员。

第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