第1章 程序设计的基本元素 1
1.1 你的第一个程序 1
1.1.1 Python程序设计 2
1.1.2 输入和输出 4
1.1.3 问题和解答 5
1.1.4 习题 8
1.2 内置数据类型 8
1.2.1 相关术语 9
1.2.2 字符串 14
1.2.3 整数 16
1.2.4 浮点数 18
1.2.5 布尔值 20
1.2.6 比较 22
1.2.7 函数和API 24
1.2.8 数据类型转换 26
1.2.9 小结 28
1.2.10 问题和解答(字符串) 28
1.2.11 问题和解答(整数) 30
1.2.12 问题和解答(浮点数) 31
1.2.13 问题和解答 32
1.2.14 习题 34
1.2.15 创新习题 35
1.3 选择结构和循环结构 37
1.3.1 if语句 38
1.3.2 else子句 39
1.3.3 while语句 40
1.3.4 for语句 44
1.3.5 语句嵌套 46
1.3.6 应用实例 48
1.3.7 循环和中断 55
1.3.8 死循环 56
1.3.9 小结 57
1.3.10 问题和解答 58
1.3.11 习题 60
1.3.12 创新习题 63
1.4 数组 65
1.4.1 Python中的数组 66
1.4.2 数组别名和拷贝 70
1.4.3 Python对数组操作提供的系统支持 71
1.4.4 一维数组应用实例 73
1.4.5 二维数组 80
1.4.6 二维数组应用实例:自回避随机行走 84
1.4.7 小结 87
1.4.8 问题和解答(字符串) 87
1.4.9 习题 88
1.4.10 创新习题 89
1.5 输入和输出 92
1.5.1 鸟瞰图 93
1.5.2 标准输出 95
1.5.3 标准输入 97
1.5.4 重定向和管道 100
1.5.5 标准绘图 104
1.5.6 动画 111
1.5.7 标准音频 113
1.5.8 小结 115
1.5.9 问题和解答 116
1.5.10 习题 118
1.5.11 创新习题 121
1.6 应用案例:随机Web冲浪模型 123
1.6.1 输入格式 124
1.6.2 转换矩阵 125
1.6.3 模拟 126
1.6.4 混合马尔可夫链 130
1.6.5 经验总结 134
1.6.6 习题 135
1.6.7 创新习题 136
第2章 函数和模块 137
2.1 定义函数 137
2.1.1 调用和定义函数 138
2.1.2 实现数学函数 145
2.1.3 使用函数组织代码 147
2.1.4 传递参数和返回值 149
2.1.5 实例:声波的叠加 152
2.1.6 问题和解答 156
2.1.7 习题 158
2.1.8 创新习题 160
2.2 模块和客户端 163
2.2.1 使用其他程序中的函数 164
2.2.2 模块化程序设计的抽象概念 168
2.2.3 随机数 172
2.2.4 数组处理API 174
2.2.5 迭代函数系统 176
2.2.6 标准统计 179
2.2.7 模块化程序设计 184
2.2.8 问题和解答 186
2.2.9 习题 188
2.2.10 创新习题 189
2.3 递归 191
2.3.1 你的第一个递归程序 192
2.3.2 数学归纳法 194
2.3.3 欧几里得算法 194
2.3.4 汉诺塔 195
2.3.5 函数调用树 196
2.3.6 指数时间 198
2.3.7 格雷码 199
2.3.8 递归图形 200
2.3.9 布朗桥 202
2.3.10 递归的陷阱 205
2.3.11 展望 207
2.3.12 问题和解答 207
2.3.13 习题 208
2.3.14 创新习题 209
2.4 案例研究:渗透原理 212
2.4.1 渗透原理 213
2.4.2 基本脚手架代码 214
2.4.3 垂直渗透 215
2.4.4 测试 217
2.4.5 估计概率 220
2.4.6 渗透原理的递归解决方案 221
2.4.7 自适应绘制图形 224
2.4.8 经验总结 227
2.4.9 问题和解答(字符串) 228
2.4.10 习题 229
2.4.11 创新习题 230
第3章 面向对象的程序设计 232
3.1 使用数据类型 232
3.1.1 方法 233
3.1.2 字符串处理 234
3.1.3 字符串处理应用:基因组学 237
3.1.4 用户自定义数据类型 237
3.1.5 颜色 242
3.1.6 数字图像处理 244
3.1.7 输入和输出(进一步讨论) 252
3.1.8 内存管理 257
3.1.9 问题和解答 258
3.1.10 习题 259
3.1.11 创新习题 261
3.2 创建数据类型 264
3.2.1 数据类型的基本元素 264
3.2.2 秒表 270
3.2.3 直方图 272
3.2.4 海龟绘图 273
3.2.5 递归图形 276
3.2.6 复数 280
3.2.7 曼德布洛特集合 281
3.2.8 商业数据处理 285
3.2.9 问题和解答 288
3.2.10 习题 290
3.2.11 创新习题 293
3.3 设计数据类型 296
3.3.1 设计API 297
3.3.2 封装 299
3.3.3 不可变性 303
3.3.4 实例:空间向量 305
3.3.5 元组 308
3.3.6 多态性 309
3.3.7 重载 310
3.3.8 函数是对象 315
3.3.9 继承 315
3.3.10 应用:数据挖掘 316
3.3.11 契约式设计 321
3.3.12 问题和解答 322
3.3.13 习题 323
3.3.14 数据类型设计习题 324
3.3.15 创新习题 325
3.4 案例研究:多体模拟 325
3.4.1 多体模拟 326
3.4.2 问题和解答 332
3.4.3 习题 333
3.4.4 创新习题 333
第4章 算法和数据结构 334
4.1 性能 334
4.1.1 观察 335
4.1.2 假说 335
4.1.3 增长量级分类 340
4.1.4 预测 343
4.1.5 注意事项 345
4.1.6 性能保证 346
4.1.7 Python列表和数组 347
4.1.8 字符串 349
4.1.9 内存 351
4.1.10 展望 354
4.1.11 问题和解答 355
4.1.12 习题 357
4.1.13 创新习题 361
4.2 排序和查找 363
4.2.1 二分查找法 363
4.2.2 插入排序算法 369
4.2.3 归并排序算法 374
4.2.4 Python系统排序方法 377
4.2.5 应用:频率计数 378
4.2.6 经验总结 380
4.2.7 问题和解答 381
4.2.8 习题 382
4.2.9 创新习题 383
4.3 栈和队列 385
4.3.1 下堆栈(后进先出栈) 386
4.3.2 基于Python列表(可变数组)实现栈 387
4.3.3 基于链表实现栈 389
4.3.4 堆栈的应用 394
4.3.5 FIFO队列 398
4.3.6 队列的应用 402
4.3.7 资源分配 404
4.3.8 问题和解答 406
4.3.9 习题 407
4.3.10 链表习题 409
4.3.11 创新习题 411
4.4 符号表 415
4.4.1 符号表API 415
4.4.2 符号表客户端 417
4.4.3 基本符号表实现 422
4.4.4 哈希表 424
4.4.5 二叉搜索树 426
4.4.6 BST的性能特点 432
4.4.7 BST的遍历 434
4.4.8 可迭代对象 434
4.4.9 有序符号表操作 436
4.4.10 字典数据类型 437
4.4.11 集合数据类型 437
4.4.12 展望 438
4.4.13 问题和解答 439
4.4.14 习题 439
4.4.15 二叉树习题 442
4.4.16 创新习题 444
4.5 案例研究:小世界现象 447
4.5.1 图 448
4.5.2 图数据类型 451
4.5.3 Graph客户端例子 454
4.5.4 图的最短路径 457
4.5.5 小世界图 464
4.5.6 经验总结 470
4.5.7 问题和解答 471
4.5.8 习题 471
4.5.9 创新习题 473
后记 477
词汇表 479
索引 482
应用程序编程接口 512