Python程序设计(原书第3版)
作者 : [美] 凯·霍斯特曼(Cay Horstmann) 兰斯·尼塞斯(Rance Necaise) 著
译者 : 江红 余青松 余靖 译
丛书名 : 计算机科学丛书
出版日期 : 2021-04-20
ISBN : 978-7-111-67881-6
适用人群 : Python初学者及爱好者
定价 : 169.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 597
开本 : 16
原书名 : Python for Everyone, Third Edition
原出版社: John Wiley & Sons(SIN)
属性分类: 教材
包含CD : 无CD
绝版 :
图书简介

本书面向Python初学者,采用模块方式呈现知识要点,而非百科全书式的语法大全。书中介绍了数值、字符串、列表、字典、集合、控制结构、函数、递归、排序、面向对象编程、文件操作等基础知识,通过大量案例来演示这些技术,重视计算思维的培养,由浅入深地将解决问题的完整方案一步步呈现在读者面前。本版新增了面向数据科学的程序示例和练习,扩展了有关字符串和列表的内容,并引入了海龟图形和游戏编程等新的数据包。本书既可作为高等院校计算机专业第 一门程序设计课的教材,也可供Python爱好者自学参考。

图书特色

轻松入门Python,新增数据科学相关示例,涵盖丰富且实用的数据包

图书前言

本书是基于Python语言的计算机程序设计导论教科书,重点是介绍Python语言的基础知识,目的是提供有效的Python语言学习方法。本书面向具有不同兴趣和能力的广大学生群体,适用于计算机科学、电子工程和其他学科首次接触程序设计的学生的初级课程。本书不需要读者有任何程序设计经验,只需要有少量的高中数学知识即可。出于教学上的原因,本书采用Python 3,因为Python 3比Python 2更为规范。
本书的主要特点如下。
夯实基础。本书采用了传统的方法,首先强调控制结构、函数、过程分解以及内置数据结构的重要性。在前几章中,只在适当的时候才使用对象。第9章才开始学习设计和实现自定义的类。
使用操作指南和实训案例引导学生走向成功。初级程序员经常会有这样的疑问:“我该如何开始?现在应该怎么办?”当然,像程序设计这样复杂的活动不能简化为菜谱式的指令。然而,循序渐进的指导非常有助于学生树立学习的信心,也有助于为解决手头的任务提供思路。本书每章中的“问题求解”部分强调设计和规划的重要性,“操作指南”环节帮助学生完成常见的程序设计任务,大量的“实训案例”则演示如何应用相关概念以解决有趣的问题。
清晰明确地制订问题的解决策略。实用的、循序渐进的技术演示有助于学生设计和评估程序设计问题的解决方案。这些策略将在最恰当的时候引入,以为学生扫清成功道路上的障碍。本书涉及的问题解决策略包括:
算法设计(借助伪代码加以展示)
编程前首先进行手工演算(手工计算示例)
流程图
测试用例
手工跟踪程序执行过程
故事板
首先求解简单的问题
可复用的函数
逐步求精
自适应算法
通过操作实体对象发现算法
跟踪对象
对象数据的模式
递归思维
估测算法的运行时间
熟能生巧。很显然,学习程序设计的学生需要能够实现复杂的程序,但他们首先需要树立成功的信心。本书每章都包含许多练习题,要求学生逐步执行复杂度递增的任务:跟踪程序代码并了解其运行效果,根据准备好的材料生成程序片段,最终实现简单的程序。在每章的结尾还提供了额外的复习题和编程题。
重点突出,技术准确。百科全书式的知识覆盖对于初学者的帮助不大,同样,把材料简化成一个简洁的要点列表对初学者的帮助也微乎其微。在本书中,知识要点是以易于理解的模块来呈现的,当读者准备好接受进一步的信息时,则通过单独的注释引导他们深入最佳实践或者语言特性中。
第3版的新特色
对数据科学的关注。数据科学的方法变得如此重要,以至于许多学科的学生(不仅仅是计算机科学)都迫不及待地希望学习程序设计的基础知识。Python由于其逻辑结构、可供探索的交互式编程库以及大量用于数据操作的库,被定位为初出茅庐的数据科学家的唯一“入门”语言。
本书采用了一种行之有效的教学方法,而不仅仅局限于计算机科学专业的程序设计教学。在第3版中,我们提供了更多聚焦于数据科学各个方面的程序示例和练习题。
适量的Python语言知识。在编写第3版时,我们的目标是教授学生良好的程序设计方法和计算机科学知识。Python语言本身的使用并不是目的,我们将其作为达成目标的教学手段。
根据本书以前版本读者的建议,在第3版中,我们扩展了有关字符串和列表的简便操作方法。
更多的工具箱。在第2版中,广受欢迎的一项扩展内容是引入了供读者参考的“工具箱”模块。在“工具箱”中,我们介绍了Python库作为一种奇妙的“生态系统”,提供了许多实用的数据包。这些扩展包使得学生可以执行一些有用的工作任务,例如统计计算、绘制图表、发送电子邮件、处理电子表格和分析网页等。Python库被置于计算机科学原理的背景之下,学生将学习如何将这些原理应用于解决现实世界中的实际问题。每个工具箱都涉及许多新的复习题和编程题。
第3版新引入的工具箱包括海龟图形工具箱和游戏编程工具箱。
章节结构
图1显示了本书各章节之间的相互关系,以及各个主题的组织方式。本书的核心内容是第1~8章。第9章和第10章涵盖面向对象的程序设计,第11章和第12章介绍算法设计和分析(学生在其他课程中将深入学习这些知识)。
图形和图像处理。通过编写程序来创建图形或者处理图像,可以为学生提供复杂主题的有效可视化。第2章介绍了开源库EzGraphics,以及如何使用EzGraphics绘制基本图形。这个库比Python的标准库(Tkinter)更易于使用,同时支持简单的图像处理。第5章包含一个可选的海龟图形工具箱。整本书中提供了诸多图形处理的实训案例以及练习题(复习题和编程题),所有这些内容都可以选择性地用于教学。
练习题。各章结尾包含大量的复习题和编程题,涉及来自图形学、数据科学和商业等应用领域中的实际问题。这些练习题可供选用,旨在激发学生的学习兴趣,同时展现程序设计在实际应用领域中的价值。
网络资源。本书提供了一套完整的在线资源。读者可以通过本书官网www.wiley.com/go/pfe3访问本书在线资源。在线资源网站包括以下内容:
本书所有的示例程序、工具箱和实训案例的源代码。
授课演示幻灯片(仅供教师使用)。
所有章节结尾的复习题和编程题的答案(仅供教师使用)。
一个侧重于技能而不仅仅是术语的测试题库(仅供教师使用)。测试题库包括数量众多的多项选择题,可以使用文字处理器进行编辑,也可以导入课程管理系统中使用。
CodeCheck是一项创新的在线服务,允许教师自行设计自动评分的编程练习题。

图1 本书各章节之间的相互关系
致谢
非常感谢John Wiley & Sons公司的Joanna Dingle、Crystal Franks、Graig Donini和Michael MacDougald以及负责出版服务的Vickie Piercey对本项目的帮助。特别感谢Cindy Johnson的辛勤工作,感谢她的正确判断力和对细节惊人的关注力。
同时感谢卡尔加里大学的Ben Stephenson在准备和评审补充材料方面所做的出色工作。
非常感谢为本书第3版的出版发行而辛勤工作的每个人,他们审阅了手稿,提出了宝贵的建议,并提醒我们关注本书的错误和遗漏。他们是:
William Bulko, University of Texas, Austin
John Conery, University of Oregon
Lee D. Cornell, Minnesota State University, Mankato
Mike Domaratzki, University of Manitoba
Rich Enbody, Michigan State University
Jackie Horton, University of Vermont
Winona Istre, University of Louisiana, Lafayette
Swami Iyer, University of Massachusetts, Boston
ToniAnn Marini, North Carolina State University
Melinda McDaniel, Georgia Institute of Technology
Shyamal Mitra, University of Texas, Austin
Ben Stephenson, University of Calgary
Mehmet Ulema, Manhattan College
David Wilkins, University of Oregon
每一个新版本都建立在以前版本的评论者、贡献者和读者的建议之上。我们感谢以下诸位所做的宝贵贡献:
Claude Anderson, Rose Hulman Institute of Technology
Jim Carrier, Guilford Technical Community College
Gokcen Cilingir, Washington State University
Lee Cornell, Minnesota State University, Mankato
Akshaye Dhawan, Ursinus College
Dirk Grunwald, University of Colorado Boulder
Andrew Harrington, Loyola University Chicago
Byron Hoy, Stockton University
Debbie Keen, University of Kentucky
Nicholas A. Kraft, University of Alabama
Aaron Langille, Laurentian University
Maria Laurent-Rice, Orange Coast College
John McManus, Randolph-Macon College
Shyamal Mitra, University of Texas Austin
Chandan R. Rupakheti, Rose-Hulman Institute of Technology
John Schneider, Washington State University
Amit Singhal, University of Rochester
Ben Stephenson, University of Calgary
Amanda Stouder, Rose-Hulman Institute of Technology
Dave Sullivan, Boston University
Jay Summet, Georgia Institute of Technology
James Tam, University of Calgary
Krishnaprasad Thirunarayan, Wright State University
Leon Tietz, Minnesota State University, Mankato
Peter Tucker, Whitworth University
Frances VanScoy, West Virginia University
Dean Zeller, University of Northern Colorado

上架指导

计算机\程序设计

封底文字

本书由经典畅销书籍《Java核心技术》的作者Cay Horstmann撰写,非常适合Python初学者和爱好者阅读。全书采用模块方式呈现知识要点,而非百科全书式的语法大全,不仅能够帮助新手快速入门,掌握基础知识,更有益于培养解决实际问题的思维和能力。
这一版新增了面向数据科学的程序示例和练习,不仅仅局限于计算机科学专业的程序设计教学;扩展了有关字符串和列表的简便操作方法,以满足读者新的学习需求;引入了海龟图形和游戏编程等数据包,借助丰富的Python库帮助读者完成不同领域的工作任务。
本书特色
首先介绍控制结构和函数等基本语法知识,以此为基础,再讲解设计和实现自定义类。
将解决方案分解为详尽的步骤,循序渐进地引导读者利用学到的概念解决有趣的问题。
从算法设计到流程图、测试用例、逐步求精、估算运行时间等,提供明确的求解策略。
每章都包含大量的复习题和编程题,通过动手实践有效帮助读者巩固知识并提升能力。
涵盖图形和图像处理,通过示例来演示数据的可视化表示,使复杂主题变得易于理解。
“工具箱”模块介绍了Python库中很多实用的数据包,可用于解决跨学科的应用问题。
配有丰富的教辅资源,源代码均可免费下载,方便读者结合书中内容自主学习和进阶。

作者简介
凯·霍斯特曼(Cay Horstmann) 圣何塞州立大学计算机科学系教授,Java的倡导者,经常在开发人员会议上发表演讲。他是《Java核心技术》的作者,同时也关注Python、Scala、C++等语言,为专业程序员和计算机科学专业学生编写过数十本图书。
兰斯·尼塞斯(Rance Necaise) 兰道尔夫-麦肯学院计算机科学系副教授,撰写了Data Structures and Algorithms Using Python和Python for Java Programmers等技术书籍。
译者简介
江红 华东师范大学副教授,博士。1994年毕业于复旦大学计算机系。曾获得上海市教学成果一等奖、华东师范大学教学成果一等奖、华东师范大学优秀任课教师奖等荣誉。
余青松 华东师范大学高级工程师。1990年毕业于华东师范大学并留校任教。编著计算机相关教材30余本,在国内外学术期刊和学术会议上发表科技论文近百篇。

作者简介

[美] 凯·霍斯特曼(Cay Horstmann) 兰斯·尼塞斯(Rance Necaise) 著:凯·霍斯特曼(Cay Horstmann) 圣何塞州立大学计算机科学系教授,Java的倡导者,经常在开发人员会议上发表演讲。他是《Java核心技术》的作者,同时也关注Python、Scala、C++等语言,为专业程序员和计算机科学专业学生编写过数十本图书。
兰斯·尼塞斯(Rance Necaise) 兰道尔夫-麦肯学院计算机科学系副教授,撰写了《Data Structures and Algorithms Using Python》和《Python for Java Programmers》等技术书籍。

译者序

在计算和数据时代,每个人都应该掌握一门计算机语言。本书适合作为立志成为计算机科学家、工程师以及其他学科领域专家的学生学习第一门程序设计课程的教材。本书也面向对程序设计感兴趣的其他读者,不需要读者有任何程序设计经验,只需要有少量的高中数学知识即可。
本书采用循序渐进的方式讲述程序设计的基础知识,以帮助学生树立学习的信心,开阔解决实际问题的思路。书中通过模块的方式来呈现知识要点,而不是像百科全书那样的编程语言语法大全。本书每章中的“语法”部分重点阐述对应知识要点所涉及的语法信息;“常见错误”部分突出强调对应知识要点可能的错误信息;“编程技巧”部分总结对应知识要点的编程方法和技巧;“问题求解”部分强调设计和规划的重要性;“操作指南”部分帮助学生完成常见的程序设计任务;“实训案例”部分演示如何应用相关概念以解决有趣的问题;“专题讨论”部分讨论相关的计算机科学背景知识,以拓展学生的视野;“工具箱”部分引入并讨论解决问题的相关库及其应用。
本书在最恰当的时候引入问题求解的相关策略,以帮助学生设计和评估程序设计问题的解决方案。本书涉及的问题解决策略包括:基于伪代码的算法设计、手工演算、流程图、测试用例、手工跟踪程序的执行过程、故事板、首先求解简单的问题、设计可复用的函数、逐步求精、自适应算法、通过操作实体对象发现算法、跟踪对象、对象数据的模式、递归思维、估测算法的运行时间等。
本书强调动手实践,以巩固和拓展所学的知识。每章都包含海量的练习题,要求学生逐步执行复杂度递增的任务:跟踪书中代码并了解其运行效果,根据准备好的材料生成程序片段,最终完成简单的程序。在每章的最后还提供了复习题和编程题,其中包含来自图形学、数据科学和商业等领域的应用问题。这些练习题旨在激发学生的学习兴趣,同时展现程序设计在应用领域中的价值。
本书提供了一套完整的在线资源,包括书中的示例程序、工具箱和实训案例的源代码,还包括仅供教师使用的幻灯片以及复习题和编程题的答案等。
本书由华东师范大学江红、余青松和余靖共同翻译。衷心感谢本书的编辑曲熠积极帮我们筹划翻译事宜并认真审阅翻译稿件。翻译也是一种再创造,同样需要艰辛的付出,感谢朋友、家人以及同事的理解和支持。感谢我们的研究生刘映君、余嘉昊、刘康、钟善毫、方宇雄、唐文芳、许柯嘉等对译稿的认真通读及指正。在本书翻译的过程中,我们力求忠于原著,但由于时间和学识有限,且本书涉及各个领域的专业知识,故不足之处在所难免,敬请诸位同行、专家和读者指正。

江红、余青松、余靖
2021年2月

图书目录

出版者的话
译者序
前言
第1章 导论 1
1.1 计算机程序 1
1.2 计算机组成结构 2
1.3 Python程序设计语言 4
1.4 熟悉程序设计环境 5
1.5 分析我们的第一个程序 9
1.6 错误信息 11
1.7 问题求解:算法设计 12
本章小结 18
复习题 19
编程题 20
第2章 数值和字符串编程 22
2.1 变量 22
2.1.1 定义变量 22
2.1.2 数值类型 24
2.1.3 变量名称 25
2.1.4 常量 25
2.1.5 注释 26
2.2 算术运算 28
2.2.1 基本的算术运算 28
2.2.2 乘幂 28
2.2.3 整除和余数 29
2.2.4 调用函数 30
2.2.5 数学函数 31
2.3 问题求解:先手工演算 35
2.4 字符串 38
2.4.1 字符串类型 38
2.4.2 字符串的拼接和重复 38
2.4.3 数值和字符串之间的相互转换 39
2.4.4 字符串和字符 40
2.4.5 字符串方法 41
2.5 输入和输出 43
2.5.1 用户输入 43
2.5.2 数值输入 44
2.5.3 格式化输出 45
2.6 图形应用:简单绘图 54
2.6.1 创建窗口 54
2.6.2 直线和多边形 55
2.6.3 填充形状和颜色 57
2.6.4 椭圆、圆和文本 59
本章小结 64
复习题 65
编程题 68
第3章 选择结构 76
3.1 if语句 76
3.2 关系运算符 80
3.3 嵌套分支 87
3.4 多分支结构 91
3.5 问题求解:流程图 96
3.6 问题求解:测试用例 99
3.7 布尔变量和运算符 100
3.8 分析字符串 105
3.9 应用案例:输入验证 107
本章小结 120
复习题 121
编程题 127
第4章 循环结构 136
4.1 while语句 136
4.2 问题求解:手工跟踪 142
4.3 应用案例:处理哨兵值 145
4.4 问题求解:故事板 148
4.5 常用循环算法 150
4.5.1 求和和平均数 150
4.5.2 匹配项计数 151
4.5.3 提示输入直到找到匹配项 151
4.5.4 最大值和最小值 151
4.5.5 比较相邻值 152
4.6 for循环 153
4.7 嵌套循环 161
4.8 处理字符串 167
4.8.1 统计匹配项 167
4.8.2 查找所有匹配项 167
4.8.3 找到第一个或者最后一个匹配项 167
4.8.4 验证字符串 168
4.8.5 创建新的字符串 169
4.9 应用案例:随机数和仿真 170
4.9.1 生成随机数 170
4.9.2 模拟掷骰子 171
4.9.3 蒙特卡罗方法 172
4.10 图形应用:数字图像处理 176
4.10.1 过滤图像 176
4.10.2 重新配置图像 179
4.11 问题求解:先易后难 180
本章小结 185
复习题 186
编程题 190
第5章 函数 200
5.1 作为黑盒的函数 200
5.2 实现和测试函数 201
5.2.1 实现函数 201
5.2.2 测试函数 202
5.2.3 包含函数的程序 202
5.3 参数传递 205
5.4 返回值 207
5.5 不带返回值的函数 214
5.6 问题求解:可复用函数 217
5.7 问题求解:逐步求精 218
5.8 变量的作用范围 231
5.9 图形应用:构建图像处理工具包 237
5.9.1 入门 237
5.9.2 比较图像 238
5.9.3 调整图像亮度 238
5.9.4 旋转图像 240
5.9.5 使用工具包 241
5.10 递归函数(可选) 245
本章小结 255
复习题 256
编程题 259
第6章 列表 266
6.1 列表的基本属性 266
6.1.1 创建列表 266
6.1.2 访问列表元素 267
6.1.3 遍历列表 269
6.1.4 列表引用 269
6.2 列表操作 273
6.2.1 附加元素 273
6.2.2 插入元素 273
6.2.3 查找元素 274
6.2.4 删除元素 275
6.2.5 拼接和复制 276
6.2.6 相等性测试 276
6.2.7 求和、最大值、最小值和排序 276
6.2.8 复制列表 277
6.3 常用列表算法 279
6.3.1 填充列表 279
6.3.2 组合列表元素 279
6.3.3 元素分隔符 280
6.3.4 最大值和最小值 280
6.3.5 线性查找 281
6.3.6 收集和统计匹配项 281
6.3.7 删除匹配项 282
6.3.8 交换元素 283
6.3.9 读取输入 284
6.4 将列表与函数一起使用 288
6.5 问题求解:修改算法 295
6.6 问题求解:通过操作实体对象发现算法 300
6.7 表格 304
6.7.1 创建表格 304
6.7.2 访问元素 305
6.7.3 定位相邻元素 305
6.7.4 计算行总计和列总计 306
6.7.5 将表格与函数一起使用 306
本章小结 314
复习题 315
编程题 318
第7章 文件和异常 325
7.1 读取和写入文本文件 325
7.1.1 打开文件 325
7.1.2 读取文件 326
7.1.3 写入文件 327
7.1.4 文件处理示例 327
7.2 文本输入和输出 328
7.2.1 遍历文件中的行 329
7.2.2 读取单词 330
7.2.3 读取字符 332
7.2.4 读取记录 333
7.3 命令行参数 340
7.4 二进制文件和随机访问(可选) 352
7.4.1 读取和写入二进制文件 352
7.4.2 随机访问 353
7.4.3 图像文件 353
7.4.4 处理BMP文件 355
7.5 异常处理 361
7.5.1 引发异常 361
7.5.2 处理异常 362
7.5.3 finally子句 364
7.6 应用案例:处理输入错误 367
本章小结 378
复习题 379
编程题 380
第8章 集合和字典 390
8.1 集合 390
8.1.1 创建和使用集合 390
8.1.2 添加和删除元素 392
8.1.3 子集 393
8.1.4 并集、交集和差集 393
8.2 字典 400
8.2.1 创建字典 401
8.2.2 访问字典的值 401
8.2.3 添加和修改数据项 401
8.2.4 删除数据项 402
8.2.5 遍历字典 403
8.3 复杂的数据结构 409
8.3.1 包含集合的字典 409
8.3.2 包含列表的字典 411
本章小结 420
复习题 421
编程题 423
第9章 对象和类 426
9.1 面向对象的程序设计 426
9.2 实现一个简单的类 427
9.3 指定类的公共接口 430
9.4 设计数据表示 431
9.5 构造函数 432
9.6 实现方法 435
9.7 测试类 438
9.8 问题求解:跟踪对象 445
9.9 问题求解:对象数据的模式 448
9.9.1 使用总计 448
9.9.2 统计事件 449
9.9.3 收集值 449
9.9.4 管理对象的属性 449
9.9.5 使用不同的状态建模对象 450
9.9.6 描述对象的位置 451
9.10 对象引用 451
9.10.1 共享引用 452
9.10.2 None引用 453
9.10.3 self引用 454
9.10.4 对象的生命周期 454
9.11 应用案例:实现一个Fraction类 456
9.11.1 Fraction类的设计 456
9.11.2 构造函数 457
9.11.3 特殊方法 458
9.11.4 算术运算 459
9.11.5 逻辑运算 460
本章小结 467
复习题 468
编程题 469
第10章 继承 475
10.1 继承的层次结构 475
10.2 实现子类 479
10.3 调用超类的构造函数 482
10.4 重写方法 485
10.5 多态 488
10.6 应用案例:几何图形类的层次结构 500
10.6.1 基类 500
10.6.2 基本形状 502
10.6.3 形状组 505
本章小结 514
复习题 514
编程题 515
第11章 递归 520
11.1 三角形数字之再探讨 520
11.2 问题求解:递归思维 523
11.3 递归辅助函数 527
11.4 递归的效率 528
11.5 排列 533
11.6 回溯 536
11.7 相互递归 543
本章小结 550
复习题 550
编程题 551
第12章 排序和查找 556
12.1 选择排序算法 556
12.2 选择排序算法的性能测量 558
12.3 选择排序算法的性能分析 559
12.4 合并排序算法 563
12.5 分析合并排序算法 565
12.6 查找算法 569
12.6.1 线性查找 570
12.6.2 二分查找 571
12.7 问题求解:估计算法的运行时间 573
12.7.1 线性时间 573
12.7.2 二次时间 574
12.7.3 三角形模式 575
12.7.4 对数时间 576
本章小结 581
复习题 581
编程题 584

教学资源推荐
作者: (美)布莱恩·R. 霍尔(Brian R.Hall) 凯文·J.斯隆卡(Kevin J.Slonka)著
作者: [美]基普·R. 欧文(Kip R. Irvine) 著
作者: [美]沙伦·比奥卡·扎卡沃(Sharon Biocca Zakhour) 索娅·坎南(Sowmya Kannan) 雷蒙德·盖拉多(Raymond Gallardo) 著
作者: 严义 包健 周尉 编著
参考读物推荐
作者: 黎跃春 韩小东 付金亮 编著
作者: 深圳中科呼图信息技术有限公司 编著
作者: Andrew Koenig;Barbara E. Moo