Python程序设计与问题求解(原书第2版)
作者 : [美]肯尼斯·A.兰伯特(Kenneth A. Lambert)著
译者 : 刘鸣涛 孙黎 甘靖 译
丛书名 : 计算机科学丛书
出版日期 : 2019-05-20
ISBN : 978-7-111-62613-8
定价 : 99.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 325
开本 : 16
原书名 : Fundamentals of Python: First Programs,Second Edition
原出版社: Cengage Learning
属性分类: 教材
包含CD : 无CD
绝版 :
图书简介

本书是为计算机专业第一门程序设计课编写的教材,适合所有程序设计初学者。书中选用流行且易于教学的Python语言,主要涵盖五个方面:程序设计基础,包括数据类型、控制结构、算法设计等;面向对象编程;数据和信息处理,包括字符串、数组、文件、列表等;软件开发全生命周期;编程实践。

图书特色

图书前言

“每个人都应该学习编程”,这是我最喜欢引用的Suzanne Keen 的一句话。Suzanne Keen 是华盛顿与李大学英语系的系主任和Thomas Broadus 荣誉教授。我在华盛顿与李大学教授计算机科学课程超过30 年,正是这句话促成了本书的第1 版,当然,也是推出第2 版的原因。本书的目的是作为学习编程和问题求解的入门课程教材,包含本科和高中阶段典型的计算机科学第一门课程(CS1)的教学内容。
本书主要包括以下五个方面:
1. 编程基础—数据类型、控制结构、算法设计和使用函数的程序设计。要使用计算机解决问题,这些都是必须掌握的基本知识。本书对这些核心主题进行了详细讲解,并配有实践练习,帮助你利用掌握的知识去解决更广泛的问题。
2. 面向对象编程(OOP)—面向对象编程是目前开发大型软件系统的主流编程范式。本书介绍了OOP 的基础原则及其正确的应用方法。
3. 数据和信息处理—大部分实用的程序都依赖于数据结构进行问题求解。常见的数据类型包括字符串、数组、文件、列表、字典等。本书对常用的数据结构进行了介绍,并利用示例展示了针对给定问题如何选择合适的数据类型进行求解。
4. 软件开发生命周期—对于软件开发技术,本书并没有独立成章,而是利用大量的案例将其贯穿起来学习。此外,你也会学到,程序编码并不是问题求解或者软件开发过程中最难、最有挑战的部分。
5. 紧跟时代的计算应用—学习编程和问题求解的最好方法就是尝试创建能够在现实中应用的有趣程序。在本书中,你将首先学习如何构建解决数字问题和处理文本的应用,例如基本的加密技术可以用来加密信用卡卡号或者其他信息,从而安全地进行网络传输。但是和其他入门书不同的是,本书并不局限于数字和文本问题的处理。多数当代实用程序都应用了图形用户界面、事件驱动编程、图形图像处理、网络通信等技术,在本书中,我们将这些技术作为掌握编程基础之后的进阶学习内容。
为什么要学习Python
在过去30 年里,计算机技术和应用变得越来越复杂,计算机科学课程也是如此,尤其是入门阶段。当今的学生在刚刚学过初步的编程和问题求解方法之后,就需要很快进入软件开发、复杂度分析、数据结构等在30 年前被认为是很复杂的高级课程的学习。同时,随着面向对象编程成为主要的问题求解范式,教师和教材作者将强大的应用编程语言(例如C++ 和Java)加入入门课程中。因此,计算机专业的学生在初学阶段不但没有体会到使用计算机解决问题的兴奋感和成就感,反而被大量复杂的概念和编程语言的语法搞得不知所措。
本书使用Python 作为编程语言,目的是使得计算机科学课程第一年的学习对学生更具有吸引力,教师也更容易掌控。Python 语言在教学方面有以下优点:
●Python 语言使用简单传统的语法。Python 编程语句和伪代码算法很相似,Python 表达式使用传统代数的运算符。因此,节省了学习编程语言本身语法的时间,可以让学生将更多精力投入到解决问题上来。
●Python 是语义安全的。任何不符合语言定义的表达式或者语句都会产生错误信息。
●Python 具有良好的扩展性。Python 既适合初学者编写简单程序,也包括现代编程语言的所有高阶特性,例如支持数据结构和面向对象编程,需要时都可以使用。
●Python 是高度交互式语言。表达式和语句都可以通过解释器的提示符直接输入运行,这就允许程序员轻松地试验代码并立即得到反馈。较长的程序段可以保存为脚本文件,之后可以作为模块进行加载或者作为独立程序运行。
●Python 是通用的。这意味着Python 包含现代应用中所需要的所有资源,包括多媒体计算和网络等。
●Python 是免费的,并且已经在工业界广泛应用。学生可以将Python 下载到各种设备上运行。Python 拥有一个巨大的开发者社区,擅长Python 编程将成为求职简历中的亮点。
综上所述,不管是对于初学者还是专家,Python 语言都是一个表达计算思维的优良且灵活的工具。如果学生在入门阶段理解了这些思想,那么应该可以轻松地迁移到后续课程要求的其他编程语言上。更重要的是,初学者可以花更多的时间去研究如何解决有趣的问题,而不仅仅是盯着电脑屏幕。
本书章节安排
本书中,每个新概念只有需要时才被引入。
第1 章首先介绍计算机科学的两个最基本的思想——算法和信息处理。然后简要概述计算机软件和硬件,最后对计算机的发展史展开论述。
第2 章和第3 章涉及问题求解和算法设计的基础。主要针对数字数据类型阐述表达式求值的标准控制结构、序列、布尔逻辑、选择和迭代。这两章的重点在于系统性和实验性的问题求解,包括算法分析、测试和文档。
第4 章和第5 章介绍字符串、文本文件、列表和字典类型的使用。在Python 中使用这些数据类型是非常简单的,可以实现一些很有意思的应用。第5 章还介绍了简单函数的定义,它用于组织算法的代码。
第6 章阐述利用函数定义进行程序抽象的技巧和优势,展示如何使用函数进行自顶向下的设计、逐步求精和递归设计,从而解决复杂问题。同时,讨论了命名空间管理的细节(参数、临时变量、模块变量等)和软件部件之间的通信。此外,还介绍了如何利用更高阶的函数式编程来简化问题的解决方案。
第7 章集中讨论如何使用对象和类来构建程序。尤其关注对象类的应用编程接口(API)、方法集,以及对象之间用于解决问题的交互方式。本章还介绍了两个现代计算应用领域—图形和图像处理,这两个领域都大量使用了基于对象的程序设计。
第8 章介绍如何定义新的类来构建图形用户界面(GUI)。本章对比了基于GUI 的事件驱动模型和基于终端命令行的过程驱动模型,详细介绍了GUI 组成部件的创建和布局,以及使用模型/ 视图模式进行GUI 程序设计。本章最初学习的定义新类的方法和其他入门书籍不同:学生将学到,定义一个新类的最简单方式是继承一个已存在的类,并构建一个自定义的子类。
第9 章继续介绍面向对象设计。通过给出多个不同应用领域的例子,展示了全新类的定义。其中的部分例子之后将整合到更加实用的应用中,以展示如何使用面向对象的软件部件构建复杂系统。为类定义合适的接口从而实现多态也是本章重点之一。
第10 章涉及几个重要计算领域的高阶内容,包括并行编程、网络和客户端/ 服务器应用程序。本章介绍了多线程编程和简单的客户端/ 服务器应用程序的构建,在课程即将结束之前,本章给出了颇具挑战性的学习内容。
第11 章涉及传统CS2 课程中的起步内容。本章介绍了使用大O 符号进行复杂度分析,同时以查找和排序算法作为例子,针对算法和数据结构进行简单的运行时间和内存占用分析。
本书的独到之处
本书使用常见的例子和图示逐步展开对各个概念的解释。随着程序逐步完整,为了解决问题而逐个加入新的概念。本书通篇都十分重视良好的编程习惯以及优雅可读的文档。本书还包括以下重要的特性:
●案例研究—案例展示了完整的Python 程序,既包括简单的程序,也有较大规模的程序。为了突出软件开发生命周期的重要性,案例研究按照“请求-分析-设计-实现-测试”的框架展开,每个阶段都定义了合适的任务。有一些案例学习内容还将扩展到章末的编程项目中。
●章节目标和本章小结—每一章的开始都列出了一系列学习目标,结束时则总结了本章涉及的主要概念。
●术语—当一个技术术语在本书中首次出现时,将使用黑体突出显示。
●练习—在每一章中,大部分重要小节结束后都带有练习。这些关于某一节内容的基础问题可以用来巩固学习效果。在每一章结束时,还提供了一系列复习题。
●编程项目—每一章结束后,都有一系列难度不同的编程项目。
●图像处理的软件工具包—提供一个开源的用来进行简易图像处理的Python 工具包(详细信息请参见第7 章)。此工具包可以在www.cengage.com 网站的学生下载页面进行下载,或者在http://home.wlu.edu/~lambertk/python/ 进行下载。
●GUI 编程的软件工具包—提供一个开源的用来进行简易GUI 编程的Python 工具包(详细信息请参见第8 章)。此工具包可以在www.cengage.com 网站的学生下载页面进行下载,或者在http://home.wlu.edu/~lambertk/breezypythongui/ 进行下载。
●附录—提供四个附录,包含获取Python 资源、工具包安装、工具包接口使用等方面的信息。
本版更新内容
为了更好地演示概念,新版中增加了多幅插图,同时对大量练习和编程项目进行了修订。第1 章中的计算发展史与时俱进地进行了更新。在二维数据结构的学习中,增加了Grid类型的分析讨论。目前,本书仍然是唯一一本全面介绍实用GUI 编程的Python 语言入门书籍。书中的第8 章使用breezypythongui工具包来简化GUI 编程的讨论,并且将GUI 编程(第8 章)安排在面向对象编程(第9 章)之前。这种安排使得学生在学习定义新类之前,就可以在GUI 编程中尝试自定义已有类型。最后,在第10 章增加了关于读者和写者问题的部分,从而展示了对共享资源的线程安全访问。
教师资源
MindTap
与本书配套的MindTap 用于帮助学生掌握当今就业需要的技能。研究表明,为了在当今快速发展的技术驱动的世界中占有一席之地,雇主更加需要具有批判性思维、有能力分析错误并创造性地解决问题的人员。通过作业和具有现实意义的实践练习,MindTap 可以帮助你掌握这些技能。作业可以指导学生掌握并理解基本知识,从而进一步解决更有挑战性的问题。
MindTap 的所有作业和练习都对应明确的章节学习目标。实践编码实验室提供了真实的应用和练习,阅读和动态可视化材料可用于课程学习,而课后作业可以准确地检验学生对知识的掌握情况。MindTap 也提供了分析和报表工具,便于查看班级的学习进展、参与度、达成率等信息。学习内容和学习路径可以针对所选教材进行设置,从而自定义学习形式,控制学生可见的内容和时间。更多信息请浏览http://www.cengage.com/mindtap/ 。
教师资源一
下列教学工具可以在教材的配套网站进行下载。请在www.cengagebrain.com 网站搜索本书,并选择“Instructor Downloads”(需要以教师身份登录)。
●教师手册:和本书配套的教师手册包含了额外的教学材料,可辅助课堂准备工作,包括概述、章节目标、教学技巧、随堂测验、课堂讨论主题、额外的编程项目、额外资源和关键术语。此外,还包括一个教学大纲示例。
●Test Bank :由Cognero 提供的Cengage 测试系统是一套灵活的在线系统,具有以下功能:
●使用多种Cengage 解决方案对Test Bank 的内容进行创建、编辑和管理。
● 即时创建多个测试版本。
●支持以学习管理系统(LMS)、教室或者其他方式进行测试发布。
●PowerPoint 幻灯片:每一章都有对应的PowerPoint 幻灯片。这些幻灯片可以作为课堂讲解的指导、学生的章节复习资料或者打印出来作为课堂讲义。还提供了书中所有图表的源文件,教师可以使用这些文件制作自己的PPT、测验或者讲义。
●习题解答:提供所有编程练习的解答,运行编程练习时所需要的输入文件也包含在解答中。
●源代码:所有源代码可以在www.cengagebrain.com 网站进行下载,其中包含程序运行所需要的输入文件。
读者反馈
我们已经尽全力提高本书的质量,但是错误总是难免的。如果你发现了书中的错误,请通过电子邮件lambertk@wlu.edu 或者网站http://support.cengage.com 告诉我们。本书的勘误信息以及其他信息将公布在网站http://home.wlu.edu/~lambertk/python/ 上,学生资源可以访问www.cengagebrain.com 。
○ 关于本书教辅资源,只有使用本书作为教材的教师才可以申请,需要的教师可向圣智学习出版公司北京代表处申请,电话010-83435000,电子邮件 asia.infochina@cengage.com。——编辑注
致谢
衷心感谢Martin Osborne ,感谢他多年来的建议、友好的批评和鼓励。十分感激来自华盛顿与李大学的学生和同事,他们使用了本书的第1 版,并给出了有益的反馈。
在此感谢以下审稿人员为本书付出的大量时间和努力:Steven Robinett ,蒙大拿州立大学大瀑布学院;Mark Williams ,马里兰大学东海岸分校;Andrew Danner,斯沃斯莫尔学院;Susan Fox,麦卡利斯特学院;Emily Shepard,中卡罗来纳社区学院。
同时,感谢来自Cengage 的John Freitas(MQA 项目主管)和Danielle Shaw(MQA 测试人员),他们确保了本书使用的数据和解决方案的正确性。
最后,感谢来自Cengage 的Kate Mason (副产品经理)、Natalie Pashoukos (高级内容开发人员)和Jennifer Feltri-George (高级内容项目经理),没有你们的帮助,本书也不可能完成。还要感谢Scarlett Lindsay 和Chandrasekar Subramanian ,他们出色地完成了本书的编辑和排版。
赠言
谨以此书献给我的挚友 Lesley 和David Novack。

Kenneth A. Lambert
弗吉尼亚州列克星敦

上架指导

计算机\程序设计

封底文字

本书专为计算机科学课程的入门阶段而作,选用Python语言,设计了易于学习且富有趣味的学习路径,使学生不再困惑于繁杂的概念和语法。全书包含大量问题求解案例和练习,涵盖完整的软件开发生命周期,旨在培养学生解决实践问题的能力。

本书特色:
·丰富的案例研究,如投资报告、机器人医生、掷骰子游戏、算法分析器等。所有案例均采用“请求-分析-设计-实现-测试”的框架,突出了软件开发生命周期的重要性。
·全面介绍GUI编程,这使得本书与其他Python入门书籍有所不同。通过GUI,学生在学习新的类定义之前,就可以尝试自定义已有类型,同时,可视化结果也增加了学习乐趣。
·实用的学习资源,如图像处理工具包、GUI编程工具包、源代码等,可以访问www.cengagebrain.com或home.wlu.edu/~lambertk/python/进行下载。

作者简介

[美]肯尼斯·A.兰伯特(Kenneth A. Lambert)著:肯尼斯·A.兰伯特(Kenneth A. Lambert) 华盛顿与李大学计算机科学系教授,该系的创建人之一。他在计算机科学的几乎所有学科领域都开设了课程,出版了20多本关于Python、C++、Java编程入门和数据结构的教科书。他创建了breezypythongui框架,并且是BreezySwing框架的合作创建者。


图书目录

出版者的话
前言
第1章 引言 1
1.1 计算机科学的两种基本思想:算法和信息处理 1
1.1.1 算法 1
1.1.2 信息处理 3
1.2 现代计算机系统的结构 3
1.2.1 计算机硬件 4
1.2.2 计算机软件 4
1.3 计算系统简史 6
1.3.1 在电子数字计算机之前 7
1.3.2 第一台电子数字计算机(1940~1950) 8
1.3.3 第一种编程语言(1950~1965) 9
1.3.4 集成电路、交互和分时 (1965~1975) 10
1.3.5 个人计算和网络(1975~1990) 11
1.3.6 咨询、通信和电子商务(1990~2000) 12
1.3.7 移动应用和普适计算(2000~现今) 13
1.4 开始Python编程 14
1.4.1 在交互式shell中运行代码 14
1.4.2 输入、处理和输出 16
1.4.3 编辑、保存和运行脚本 18
1.4.4 幕后:Python是如何工作的 19
1.5 检测和纠正语法错误 19
1.6 拓展阅读 20
1.7 本章小结 20
1.8 复习题 21
1.9 编程项目 22
第2章 软件开发、数据类型和表达式 23
2.1 软件开发过程 23
2.2 案例研究:所得税计算器 25
2.3 字符串、赋值和注释 27
2.3.1 数据类型 27
2.3.2 字符串字面量 27
2.3.3 转义序列 282.3.4 字符串连接 29
2.3.5 变量和赋值语句 29
2.3.6 程序注释和文档字符串 30
2.4 数字数据类型和字符集 31
2.4.1 整数 31
2.4.2 浮点数 31
2.4.3 字符集 32
2.5 表达式 33
2.5.1 算术表达式 33
2.5.2 混合模式算术和类型转换 35
2.6 函数和模块的使用 36
2.6.1 调用函数:参数和返回值 36
2.6.2 math模块 37
2.6.3 main模块 38
2.6.4 程序格式和结构 39
2.6.5 使用终端命令提示符运行脚本 39
2.7 本章小结 41
2.8 复习题 412.9 编程项目 42
第3章 循环和选择语句 44
3.1 确定迭代:for循环 44
3.1.1 执行语句给定次数 44
3.1.2 计数控制循环 45
3.1.3 增量赋值 46
3.1.4 循环错误:大小差一错误 46
3.1.5 遍历数据序列的内容 47
3.1.6 指定range函数的步长 47
3.1.7 向下计数的循环 48
3.2 格式化输出文本 48
3.3 案例研究:投资报告 50
3.4 选择:if语句和if-else语句 53
3.4.1 布尔类型、比较和布尔表达式 53
3.4.2 if-else语句 54
3.4.3 单路选择语句 55
3.4.4 多路if语句 55
3.4.5 逻辑运算符和复合布尔表达式 56
3.4.6 短路计算 58
3.4.7 测试选择语句 58
3.5 条件迭代:while循环 59
3.5.1 while循环的结构和行为 59
3.5.2 使用while循环的计数控制 60
3.5.3 while True 循环和break语句 61
3.5.4 随机数 62
3.5.5 循环逻辑、错误和测试 63
3.6 案例研究:近似平方根 64
3.7 本章小结 66
3.8 复习题 67
3.9 编程项目 68
第4章 字符串和文本文件 70
4.1 访问字符串中的字符和子字符串 70
4.1.1 字符串的结构 70
4.1.2 下标运算符 71
4.1.3 子字符串切片 72
4.1.4 使用in运算符测试子字符串 72
4.2 数据加密 73
4.3 字符串和数字系统 75
4.3.1 表示数字的位置系统 75
4.3.2 将二进制转换为十进制 76
4.3.3 将十进制转换为二进制 76
4.3.4 转换技巧 77
4.3.5 八进制和十六进制数字 78
4.4 字符串方法 78
4.5 文本文件 81
4.5.1 文本文件及其格式 81
4.5.2 将文本写入文件 82
4.5.3 将数字写入文件 82
4.5.4 从文件中读取文本 82
4.5.5 从文件中读取数字 83
4.5.6 访问和操作磁盘上的文件和目录 84
4.6 案例研究:文本分析 86
4.7 本章小结 89
4.8 复习题 90
4.9 编程项目 90
第5章 列表和字典 92
5.1 列表 92
5.1.1 列表字面量和基础运算符 93
5.1.2 替换列表中的元素 94
5.1.3 插入和删除列表中的元素 95
5.1.4 搜索列表 96
5.1.5 排序列表 97
5.1.6 修改器方法和None值 97
5.1.7 别名和副作用 97
5.1.8 相等性:对象标识相等和结构相等 98
5.1.9 示例:使用列表查找数字集的中位数 99
5.1.10 元组 100
5.2 定义简单函数 101
5.2.1 简单函数定义的语法 101
5.2.2 形参和实参 102
5.2.3 return语句 102
5.2.4 布尔函数 102
5.2.5 定义main函数 102
5.3 案例研究:生成句子 103
5.4 字典 106
5.4.1 字典字面量 106
5.4.2 插入键和修改值 106
5.4.3 访问值 107
5.4.4 删除键 107
5.4.5 遍历字典 107
5.4.6 示例:十六进制回顾 108
5.4.7 示例:查找列表中的众数 109
5.5 案例研究:非指导式心理治疗 110
5.6 本章小结 113
5.7 复习题 114
5.8 编程项目 114
第6 章 使用函数设计程序 116
6.1 关于函数定义及其运行机制的 快速回顾 116
6.1.1 函数作为抽象机制 117
6.1.2 函数消除冗余 117
6.1.3 函数隐藏复杂性 118
6.1.4 函数利用系统可变性支持 通用方法 118
6.1.5 函数支持分工协作 118
6.2 利用自顶向下的设计解决问题 119
6.2.1 文本分析程序的设计 119
6.2.2 句子生成器程序的设计 120
6.2.3 医生程序的设计 121
6.3 使用递归函数设计程序 122
6.3.1 递归函数的定义 122
6.3.2 跟踪递归函数 123
6.3.3 使用递归定义来构造递归 函数 124
6.3.4 句子结构中的递归应用 124
6.3.5 无限递归 125
6.3.6 递归的优缺点 125
6.4 案例研究:收集文件系统信息 127
6.5 管理程序的命名空间 131
6.5.1 模块变量、参数和临时变量 132
6.5.2 作用域 132
6.5.3 生存期 133
6.5.4 使用关键字定义默认值和 可选参数 133
6.6 高阶函数 135
6.6.1 函数作为第一类数据对象 135
6.6.2 映射 136
6.6.3 过滤 137
6.6.4 化简 137
6.6.5 使用lambda 表达式创建匿名函数 137
6.6.6 创建跳转表 138
6.7 本章小结 139
6.8 复习题 140
6.9 编程项目 141
第7 章 简单图形和图像处理 143
7.1 简单图形 143
7.1.1 海龟绘图法概述 143
7.1.2 海龟绘图法的常用操作 144
7.1.3 建立turtle.cfg 文件并在IDLE 中运行 146
7.1.4 对象实例化和turtle 模块 146
7.1.5 绘制二维图形 147
7.1.6 检查对象属性 148
7.1.7 操作海龟绘图窗口 149
7.1.8 随机漫步 149
7.1.9 颜色和RGB 系统 150
7.1.10 示例:使用随机颜色填充放射状图案 151
7.2 案例研究:分形图形中的 递归模式 152
7.3 图像处理 154
7.3.1 模拟信号和数字信号 155
7.3.2 采样和数字化图像 155
7.3.3 图像文件格式 155
7.3.4 图像处理操作 156
7.3.5 图像的属性 156
7.3.6 images 模块 156
7.3.7 遍历网格的循环模式 158
7.3.8 关于元组的使用 159
7.3.9 将图像转换成黑白 160
7.3.10 将图像转换成灰度 160
7.3.11  复制图像 161
7.3.12 模糊图像 161
7.3.13 边缘检测 162
7.3.14 缩小图像尺寸 163
7.4 本章小结 165
7.5 复习题 166
7.6 编程项目 166
第8 章 图形用户界面 170
8.1 基于终端的程序和基于GUI 的程序 170
8.1.1 基于终端的版本 171
8.1.2 基于GUI 的版本 171
8.1.3 事件驱动编程 172
8.2 编写简单的基于GUI 的程序 173
8.2.1 简单的“Hello world !”程序 173
8.2.2 用于所有GUI 程序的模板 174
8.2.3 定义类和方法的语法 174
8.2.4 子类化和继承的抽象机制 175
8.3 窗口和窗口组件 175
8.3.1 窗口及其属性 175
8.3.2 窗口布局 176
8.3.3 窗口组件的类型及其属性 177
8.3.4 显示图像 178
8.4 命令按钮和响应事件 180
8.5 使用输入字段进行输入和输出 181
8.5.1 文本字段 181
8.5.2 数值数据的整数和浮点数 字段 182
8.5.3 使用弹出式消息框 184
8.6 定义和使用实例变量 185
8.7 案例研究:猜谜游戏回顾 186
8.8 其他有用的GUI 资源 189
8.8.1 使用嵌套框架组织组件 189
8.8.2 多行文本域 190
8.8.3 文件对话框 192
8.8.4 使用提示框获取输入 194
8.8.5 复选按钮 195
8.8.6 单选按钮 196
8.8.7 键盘事件 197
8.8.8 颜色的使用 198
8.8.9 使用颜色选择器 199
8.9 本章小结 201
8.10 复习题 201
8.11  编程项目 202
第9 章 使用类设计程序 204
9.1 深入理解对象和类 205
9.1.1 第一个示例:Student 类 205
9.1.2 文档字符串 207
9.1.3 方法定义 207
9.1.4 __init__ 方法和实例变量 207
9.1.5 __str__ 方法 208
9.1.6 访问器和修改器 208
9.1.7 对象的生存期 208
9.1.8 定义简单类的经验法则 209
9.2 案例研究:掷骰子游戏 210
9.3 数据建模示例 215
9.3.1 有理数 215
9.3.2 有理数的算术运算和运算符 重载 217
9.3.3 比较方法 217
9.3.4 判等和__eq__ 方法 218
9.3.5 存款账户和类变量 219
9.3.6 将账户存入银行 220
9.3.7 使用pickle 实现对象持久化 222
9.3.8 载入对象和try-except 语句 223
9.3.9 纸牌游戏 224
9.4 案例研究:ATM 226
9.5 构建新的数据结构:二维网格 230
9.5.1 Grid 类的接口 231
9.5.2 Grid 类的实现:数据的 实例变量 232
9.5.3 Grid 类的实现:下标和搜索 233
9.6 案例研究:使用块加密算法进行 数据加密 233
9.7 使用继承和多态来组织类 236
9.7.1 继承层次和建模 236
9.7.2 示例1:受限的存款账户 237
9.7.3 示例2:21 点游戏中的 庄家和玩家 238
9.7.4 多态方法 242
9.7.5 面向对象编程的优缺点 242
9.8 本章小结 243
9.9 复习题 244
9.10 编程项目 245
第10章 多线程、网络和客户端/服务器编程 247
10.1 线程和进程 247
10.1.1 线程 248
10.1.2 睡眠线程 250
10.1.3 生产者、消费者和同步 251
10.2 读者和写者问题 256
10.2.1 使用SharedCell类 257
10.2.2 实现SharedCell类的接口 258
10.2.3 实现SharedCell类的帮助方法 259
10.2.4 使用Counter对象测试SharedCell类 260
10.2.5 定义线程安全的类 260
10.3 网络、客户端和服务器 262
10.3.1 IP地址 262
10.3.2 端口、服务器和客户端 263
10.3.3 套接字和日期/时间客户端脚本 263
10.3.4 日期/时间服务器脚本 264
10.3.5 双向聊天脚本 266
10.3.6 多个客户端的同时处理 267
10.4 案例研究:建立医生和病人之间的双向对话 269
10.5 本章小结 273
10.6 复习题 274
10.7 编程项目 274
第11章 查找、排序和复杂度分析 276
11.1 衡量算法效率 276
11.1.1 衡量算法的运行时间 276
11.1.2 指令计数 278
11.2 复杂度分析 280
11.2.1 复杂度的量级 280
11.2.2 大O符号 281
11.2.3 常数因子的作用 281
11.2.4 衡量算法占用的内存 282
11.3 查找算法 282
11.3.1 查找最小数 283
11.3.2 列表的顺序查找 283
11.3.3 最好情况、最坏情况和平均情况的算法性能 283
11.3.4 列表的二分查找 284
11.4 基本排序算法 286
11.4.1 选择排序 286
11.4.2 冒泡排序 287
11.4.3 插入排序 288
11.4.4 最好情况、最坏情况和平均情况的算法性能回顾 289
11.5 更快的排序算法 289
11.5.1 快速排序 290
11.5.2 归并排序 293
11.6 指数算法:斐波那契递归 296
11.7 将斐波那契递归从指数算法转换成线性算法 296
11.8 案例研究:算法分析器 297
11.9 本章小结 301
11.10 复习题 302
11.11 编程项目 302
附录A Python资源 304
附录B 安装images库和breezypythongui库 306
附录C 图像处理API 307
附录D 从Python到Java和C++ 308

教学资源推荐
作者: [美]贝赫鲁兹·A. 佛罗赞(Behrouz A.Forouzan) 理查德·F. 吉尔伯格(Richard F. Gilberg) 著
参考读物推荐
作者: [美]史蒂夫·斯卡格尔(Steve Scargall) 著
作者: (英)Ayers,D.