第1章 概述 1
1.1 计算机程序 1
1.2 深入剖析计算机 2
1.3 Python编程语言 4
1.4 熟悉编程环境 5
1.5 分析第一个程序 9
1.6 错误 11
1.7 问题解决:算法设计 13
本章小结 18
复习题 19
编程练习 20
第2章 数字与字符串编程 23
2.1 变量 23
2.1.1 定义变量 23
2.1.2 数字类型 25
2.1.3 变量名 26
2.1.4 常量 27
2.1.5 注释 27
2.2 算术运算 29
2.2.1 基本算术运算 29
2.2.2 幂运算 30
2.2.3 整除和余数 30
2.2.4 调用函数 31
2.2.5 数学函数 33
2.3 问题解决:首先手工完成 36
2.4 字符串 39
2.4.1 字符串类型 39
2.4.2 连接与重复 40
2.4.3 转换数字和字符串 41
2.4.4 字符串与字符 41
2.4.5 字符串方法 42
2.5 输入输出 45
2.5.1 用户输入 45
2.5.2 输入数字 46
2.5.3 格式化输出 47
2.6 图形:简单绘图 56
2.6.1 创建窗口 56
2.6.2 线和多边形 57
2.6.3 内部填充的形状与颜色 58
2.6.4 椭圆、圆和文本 60
本章小结 66
复习题 67
编程练习 69
第3章 选择结构 78
3.1 if语句 78
3.2 关系运算符 82
3.3 嵌套的分支 90
3.4 多重选择 94
3.5 问题解决:流程图 99
3.6 问题解决:测试用例 102
3.7 布尔变量和运算符 104
3.8 分析字符串 109
3.9 应用:输入验证 112
本章小结 125
复习题 126
编程练习 131
第4章 循环 142
4.1 while循环 142
4.2 问题解决:手工跟踪 148
4.3 应用:处理警戒值 151
4.4 问题解决:故事板 155
4.5 常见循环算法 158
4.5.1 数值求和与平均 158
4.5.2 匹配计数 158
4.5.3 遇到匹配项之前一直提示 159
4.5.4 最大值与最小值 159
4.5.5 比较相邻值 159
4.6 for循环 161
4.7 嵌套循环 168
4.8 处理字符串 175
4.8.1 统计匹配项 175
4.8.2 查找所有匹配 176
4.8.3 查找第一个或最后一个匹配项 176
4.8.4 验证字符串 176
4.8.5 构建新字符串 177
4.9 应用:随机数和模拟 179
4.9.1 生成随机数 179
4.9.2 模拟掷骰子 180
4.9.3 蒙特卡罗方法 180
4.10 图形:数字图像处理 184
4.10.1 图像过滤 184
4.10.2 重构图像 187
4.11 问题解决:先解决一个简单些的问题 188
本章小结 194
复习题 195
编程练习 199
第5章 函数 212
5.1 函数如同黑盒子 212
5.2 实现和测试函数 213
5.2.1 实现函数 213
5.2.2 测试函数 214
5.2.3 包含函数的程序 215
5.3 参数传递 217
5.4 返回值 219
5.5 没有返回值的函数 228
5.6 问题解决:可复用的函数 229
5.7 问题解决:逐步提炼 233
5.8 变量作用域 246
5.9 图形:实现图像处理工具包 252
5.9.1 准备开始 252
5.9.2 比较图像 253
5.9.3 调整图像亮度 253
5.9.4 旋转图像 255
5.9.5 使用工具包 256
5.10 递归函数(可选) 260
本章小结 264
复习题 265
编程练习 267
第6章 列表 276
6.1 列表基本属性 276
6.1.1 创建列表 276
6.1.2 访问列表元素 277
6.1.3 遍历列表 278
6.1.4 列表引用 279
6.2 列表操作 282
6.2.1 追加元素 282
6.2.2 插入元素 282
6.2.3 查找元素 283
6.2.4 删除元素 284
6.2.5 连接与重复 285
6.2.6 相等性测试 285
6.2.7 求和、最大值、最小值和排序 285
6.2.8 复制列表 285
6.3 常用列表算法 288
6.3.1 填充 288
6.3.2 合并列表元素 288
6.3.3 元素分隔符 289
6.3.4 最大值和最小值 289
6.3.5 线性搜索 290
6.3.6 收集和统计匹配项 290
6.3.7 删除匹配项 291
6.3.8 交换元素 291
6.3.9 读取输入 292
6.4 在函数中使用列表 297
6.5 问题解决:修改算法 304
6.6 问题解决:通过处理物理对象发现算法 310
6.7 表格 314
6.7.1 创建表格 314
6.7.2 访问元素 315
6.7.3 定位邻居元素 315
6.7.4 计算行和列的总和 316
6.7.5 在函数中使用表格 316
本章小结 324
复习题 325
编程练习 328
第7章 文件与异常 337
7.1 读取和写入文本文件 337
7.1.1 打开文件 337
7.1.2 读取文件 338
7.1.3 写入文件 339
7.1.4 文件处理案例 339
7.2 文本输入和输出 341
7.2.1 迭代文件中的行 341
7.2.2 读取单词 342
7.2.3 读取字符 344
7.2.4 读取记录 345
7.3 命令行参数 353
7.4 二进制文件与随机访问(可选) 365
7.4.1 读写二进制文件 365
7.4.2 随机访问 366
7.4.3 图像文件 366
7.4.4 处理BMP文件 367
7.5 异常处理 373
7.5.1 抛出异常 374
7.5.2 处理异常 375
7.5.3 finally子句 376
7.6 应用:处理输入错误 380
本章小结 391
复习题 392
编程练习 393
第8章 集合与字典 404
8.1 集合 404
8.1.1 创建和使用集合 404
8.1.2 增加和删除元素 405
8.1.3 子集 406
8.1.4 并集、交集和差集 407
8.2 字典 414
8.2.1 创建字典 414
8.2.2 访问字典的值 415
8.2.3 增加和修改项 415
8.2.4 删除项 416
8.2.5 遍历字典 416
8.3 复杂结构 422
8.3.1 包含集合的字典 423
8.3.2 包含列表的字典 425
本章小结 434
复习题 435
编程练习 436
第9章 对象和类 440
9.1 面向对象编程 440
9.2 实现一个简单的类 441
9.3 指定类的公开接口 445
9.4 设计数据表示 446
9.5 构造函数 448
9.6 实现方法 451
9.7 测试一个类 454
9.8 问题解决:跟踪对象 462
9.9 问题解决:对象数据的模式 465
9.9.1 记录总数 465
9.9.2 事件计数 465
9.9.3 收集值 466
9.9.4 管理对象的属性 466
9.9.5 使用唯一状态建模对象 467
9.9.6 描述对象的位置 467
9.10 对象引用 469
9.10.1 共享引用 470
9.10.2 None引用 471
9.10.3 self引用 472
9.10.4 对象的生命周期 472
9.11 应用:编写一个Fraction类 473
9.11.1 Fraction类的设计 473
9.11.2 构造函数 474
9.11.3 特殊方法 475
9.11.4 算术运算 477
9.11.5 逻辑运算 478
本章小结 485
复习题 486
编程练习 487
第10章 继承 495
10.1 继承层次结构 495
10.2 实现子类 499
10.3 调用超类构造函数 502
10.4 覆盖方法 506
10.5 多态 509
10.6 应用:几何形状类层次结构 523
10.6.1 基类 523
10.6.2 基本形状 525
10.6.3 形状分组 528
本章小结 530
复习题 531
编程练习 532
第11章 递归 537
11.1 再看三角数 537
11.2 问题解决:递归思维 541
11.3 递归辅助函数 545
11.4 递归的效率 546
11.5 排列 551
11.6 回溯 555
11.7 互递归 561
本章小结 568
复习题 569
编程练习 569
第12章 排序和搜索 575
12.1 选择排序 575
12.2 分析选择排序算法 577
12.3 分析选择排序算法的性能 579
12.4 归并排序 583
12.5 分析归并排序算法 585
12.6 搜索 589
12.6.1 线性搜索 589
12.6.2 二分搜索 590
12.7 问题解决:估计算法的运行时间 592
12.7.1 线性时间 592
12.7.2 二次时间 593
12.7.3 三角模式 594
12.7.4 对数时间 595
本章小结 602
复习题 603
编程练习 605