编辑推荐

适读人群:初学Python语言的程序员,高等院校相关专业的本科生,对Python编程感兴趣的初学者

1)多伦多大学教授带来的经典编程入门书,基于Python3.6,数万学生课堂使用。
2)无需任何编程经验!循序渐进的例子帮助读者理解设计程序过程的步骤和错误,使得读者能够独立解决自己的问题。
3)使用了Python3.6新增加的特性,包括参数的类型注释,返回类型和变量声明,以及字符串格式化的新变化。
4)通过阅读《Python3.6编程实践指南 计算机科学入门(原书第3版)》,读者将学会如何像职业程序员那样思考问题。
5)所有源代码、安装指引和习题解都可以在以下网站找到:http://pragprog.com/book/gwpy3/practical-programming。

内容简介

《Python3.6编程实践指南——计算机科学入门》(原书第3版)通过Python语言介绍了编程的基本知识,内容包括现代编程语言常用的各种数据存储和基本处理方法,如数值、字符串、列表、集合、字典和文本信息;程序的条件和循环控制结构;函数的概念、定义和应用;编程方法以及测试和调试思路。《Python3.6编程实践指南 计算机科学入门(原书第3版)》也介绍了一些更高级的编程知识,包括面向对象的编程方法、图形用户界面的构建以及数据库的处理。

作者简介

PaulGries在多伦多大学计算机科学系有超过15年的教学经验。在多伦多大学期间,Paul获得过许多教学奖,合作出版了两部教材,而且一直是本系课程设计和更新的领导者。他和JenniferCampbell在MOOC给成千上万的学生讲授Python。

JenniferCampbell是多伦多大学在计算机科学方面的教学系列教授。她在2014年获得文理学院杰出教学奖。Jennifer致力于计算机科学教育研究,研究学生体验、成功因素和各种课程的有效性,包括翻转课堂和在线课堂。

JasonMontojo是具有19年职业经验的软件开发者。他的专业是软件考古学,而且在谷歌编程之夏和软件学徒计划(SoftwareCarpentryprograms)中指导过几十位学生。

精彩书评

但愿时光倒流,能把这《Python3.6编程实践指南 计算机科学入门(原书第3版)》送给10岁时开始学习编程的自己。相对于我在孩提时代尝试理解的那些干巴巴的编程图书,《Python3.6编程实践指南 计算机科学入门(原书第3版)》是如此吸引人、如此实用和容易理解。我喜欢作者的讲解方式:学生自己在Python解释器下键入代码的同时,能够阅读和理解代码的解释。

——PhilipGuo在线Python家教(www.pythontutor.com)创建者,加州大学圣地亚哥分校认知科学系助理教授

书如其名,《Python3.6编程实践指南 计算机科学入门(原书第3版)》是一本集清晰性、可读性和实用性为一体的编程入门图书。它不仅是学习编程技术的指南,而且是终身学习编程技术的基础:一个新颖、简单、易懂的可视化内存和程序运行模型,一个帮助读者编写高质量软件的设计菜单。

——StevenWolfman不列颠哥伦比亚大学计算机科学系教授

这本优秀的教材是作者多年教授大学生初学Python编程的经验结晶。书中内容组织自然,初学者常见错误和误解都得到明确的指导。每章的习题让感兴趣的学生能够进一步探索计算机科学和编程语言。

——KathleenFreeman俄勒冈大学计算机和信息科学系本科生教学主管

目录

译者序

原书前言

致谢

作者简介

第1章什么是编程//1

1.1 程序和编程//2

1.2 什么是编程语言//3

1.3 什么是程序错误(Bug)//3

1.4 方括号、圆括号和花括号的区别//4

1.5 安装Python//4

第2章你好,Python//5

2.1 计算机如何运行一个Python程序//5

2.2 表达式和值:用Python做算术//6

2.2.1 类型//7

2.2.2 整数除法、模和幂运算//8

2.3 什么是类型//9

2.3.1 有穷精度//10

2.3.2 运算的优先级//10

2.4 变量和计算机内存:记忆值//12

2.4.1 值、变量和计算机内存//13

2.4.2 赋值语句//14

2.4.3 给变量重新赋值//15

2.4.4 增强赋值//16

2.5 Python如何告诉用户出错了//18

2.6 占多行的单个语句//19

2.7 代码的描述//20

2.8 增强代码的可读性//21

2.9 本章小结//21

2.10 习题//22

第3章函数的设计与应用//24

3.1 Python提供的函数//24

3.2 内存地址:Python如何跟踪内存存储的值//27

3.3 自定义函数//28

3.4 用局部变量作临时存储//31

3.5 在内存模型中跟踪函数调用//32

3.6 设计新函数:一个菜单//38

3.6.1 设计三个有关生日的函数//40

3.7 编写和运行一个程序//48

3.8 省略一个返回语句:None//50

3.9 处理代码不能处理的情况//50

3.10 本章小结//51

3.11 习题//52

第4章文本的处理//54

4.1 构造字符串//54

4.1.1 串上的操作//55

4.2 在串中使用特殊字符//57

4.3 构建多行串//58

4.4 打印信息//59

4.5 从键盘获取信息//62

4.6 本章小结//63

4.7 习题//63

第5章选择//65

5.1 布尔类型//65

5.1.1 布尔运算//65

5.1.2 关系运算//68

5.1.3 比较运算的组合//70

5.1.4 短路求值//72

5.1.5 串的比较//72

5.2 选择执行的语句//73

5.3 嵌套条件语句//79

5.4 记住一个布尔表达式求值的结果//79

5.5 本章小结//81

5.6 习题//81

第6章程序组织的模块化方法//84

6.1 导入模块//85

6.2 定义自己的模块//89

6.2.1 导入时发生了什么//90

6.2.2 在导入时选择要运行的代码:__main__//91

6.3 半自动地测试代码//95

6.4 函数分组的原则//96

6.5 本章小结//96

6.6 习题//97

第7章方法的使用//98

7.1 模块、类和方法//98

7.2 面向对象的调用方法//100

7.3 探索字符串方法//101

7.4 那些下划线是什么//105

7.5 本章小结//107

7.6 习题//107

第8章使用列表存储数据集合//109

8.1 存储和访问列表中的数据//109

8.1.1 空列表//111

8.1.2 列表是异构的//111

8.2 列表类型注释//112

8.3 修改列表//113

8.4 列表上的操作//114

8.4.1 列表上的in操作符//116

8.5 列表切片//116

8.6 使用别名:名称代表什么//118

8.6.1 可变参数//118

8.7 列表方法//120

8.8 处理列表的列表//121

8.9 本章小结//123

8.10 习题//123

第9章使用循环重复代码//126

9.1 处理列表中的数据项//126

9.2 处理字符串中的字符//128

9.3 在某个范围的数字上循环//128

9.3.1 生成数字范围//128

9.4 用索引处理列表//130

9.4.1 使用索引处理并行列表//132

9.5 循环嵌套循环//133

9.5.1 嵌套列表上的循环//134

9.5.2 循环不规则列表//135

9.6 循环直到某个条件成立//136

9.6.1 无限循环//138

9.7 基于用户输入的重复//138

9.8 使用break和continue控制循环//139

9.8.1 break语句//139

9.8.2 continue语句//141

9.8.3 关于break和continue的警告//142

9.9 本章小结//143

9.10 习题//143

第10章文件读写//146

10.1 文件分多少种//146

10.2 打开文件//147

10.2.1 with语句//148

10.2.2 计算机上的文件是如何组织的//149

10.2.3 指定想要的文件//149

10.3 读取文件的方法//150

10.3.1 读取方法//150

10.3.2 Readlines方法//151

10.3.3 "ForLineinFile"方法//152

10.3.4 Readline方法//153

10.4 互联网上的文件//155

10.5 写入文件//156

10.6 使用StringIO编写示例调用//157

10.7 编写使用文件读取技术的算法//159

10.7.1 跳过标题//159

10.7.2 处理数据中缺失的值//161

10.7.3 处理空格分隔的数据//163

10.8 多行记录//167

10.9 向前看//170

10.10 本章小结//172

10.11 习题//172

第11章 使用其他容器类型存储数据//174

11.1 使用集合存储数据//174

11.1.1 集合运算//176

11.1.2 集合示例:北极鸟//178

11.1.3 集合的内容一定是不可变的//179

11.2 使用多元组存储数据//179

11.2.1使用多元组赋值给多个变量//183

11.3 用字典存储数据//184

11.3.1 更新和检查成员//186

11.3.2 遍历字典//187

11.3.3 字典操作//188

11.3.4 字典示例//190

11.4 反转字典//191

11.5 在元组、集合和字典中使用in运算符//192

11.6 各种容器的比较//193

11.7 创建新的类型注释//193

11.8 本章小结//194

11.9 习题//195

第12章算法的设计//197

12.1 查找两个最小值//197

12.1.1 查找、移除、查找//199

12.1.2 排序、确定最小值、获取索引//201

12.1.3 遍历列表//202

12.2 定时功能//205

12.3 本章小结//207

12.4 习题//207

第13章 搜索与排序//209

13.1 搜索列表//209

13.1.1 线性搜索概述//209

13.1.2 线性搜索的while循环版本//211

13.1.3 线性搜索的for循环版本//212

13.1.4 哨兵搜索//213

13.1.5 对搜索进行计时//214

13.1.6 线性搜索的运行时间//215

13.2 二分搜索//215

13.2.1 二分搜索的运行时间//219

13.2.2 内置二分搜索//219

13.3 排序//220

13.3.1 选择排序//221

13.3.2 插入排序//225

13.3.3 性能//227

13.4 更高效的排序算法//229

13.4.1 第一次尝试//229

13.5 归并排序:一种快速排序算法//229

13.5.1 归并两个有序列表//230

13.5.2 归并排序//230

13.5.3 归并排序的分析//232

13.6 本章小结//233

13.7 习题//234

第14章 面向对象的编程//236

14.1 理解一个问题域//236

14.2 isinstance函数、object类和Book类//237

14.3 在Book类中编写一个方法//240

14.4 使用Python语法:更多特殊的方法//246

14.5 面向对象理论的一些知识//249

14.5.1 封装//249

14.5.2 多态//250

14.5.3 继承//251

14.6 案例学习:分子、原子和PDB文件//254

14.6.1 Atom类//255

14.6.2 Molecule类//256

14.7 本章小结//258

14.8 习题//258

第15章 测试与调试//262

15.1 为什么需要做程序测试//262

15.2 案例学习:测试above_freezing//263

15.2.1 为above_freezing选择测试样例//263

15.2.2 使用unittest模块测试above_freezing//264

15.3 案例学习:测试函数running_sum//267

15.3.1 为函数running_sum选择测试样例//268

15.3.2 使用unittest模块测试running_sum函数//268

15.4 选择测试样例//273

15.5 寻找程序错误//273

15.6 本章小结//274

15.7 习题//274

第16章创建图形用户接口//277

16.1 使用tkinter模块//277

16.2 构建一个基本的GUI//278

16.2.1 在小部件中使用可修改变量//279

16.2.2 使用框架类型来组合小部件//280

16.2.3 使用输入框类型从用户处获取信息//281

16.3 模型、视图和控制器//281

16.3.1 使用Lambda//283

16.4 自定义可视化样式//286

16.4.1 改变字体//286

16.4.2 改变颜色//286

16.4.3 小部件的布局//288

16.5 其他小部件简介//289

16.5.1 使用文本//289

16.5.2 使用复选按钮//290

16.5.3 使用菜单//291

16.6 面向对象的GUI//292

16.7 本章小结//293

16.8 习题//294

第17章数据库//295

17.1 概述//295

17.2 创建和填充//296

17.2.1 保存更改//298

17.2.2 关闭连接//299

17.3 数据检索//299

17.3.1 查询条件//301

17.4 更新和删除//301

17.5 为缺失的数据使用NULL//302

17.6 使用连接来组合表格//303

17.6.1 移除重复值//306

17.7 键和约束//307

17.8 高级功能//308

17.8.1 聚合//308

17.8.2 分组//308

17.8.3 自连接//309

17.8.4 嵌套查询//310

17.8.5 事务//312

17.9 本章小结//313

17.10 习题//314

参考文献//316

前言/序言

《Python3.6编程实践指南——计算机科学入门》(原书第3版)使用Python编程语言讲解计算机科学课题和一些实际应用。读者在阅读《Python3.6编程实践指南 计算机科学入门(原书第3版)》的过程中定能学会Python,同时也会学到每个程序员应该掌握的知识:如何理解一个问题,如何将问题分解,为何及如何构建代码,如何测试代码以确保程序确实符合需求,等等。
选择Python有以下几方面的原因:
1)Python是免费的,而且有翔实的资料。事实上,Python是目前规模最大、组织最好的开源项目之一。
2)Pyhton可以在任何设备上运行。从手机到超级计算机均可以运行用C语言实现的Python,而且对Windows、macOS和Linux均有专业级安装程序支持。
3)Python有清晰的语法。确实,每种语言都声称语法清晰,但是经过在多伦多大学多年的使用,我们发现,学生使用Python所犯的“标点符号”错误比使用类C语言所犯的错误少得多。
4)Python有实际应用。每天有成千上万的公司使用Python:它是Google使用的语言之一,Industrial&LightMagic大量使用Python,EVE在线的大量游戏基于Python编写。学术界也大量使用Python。
Python有很好的工具支持。传统的编辑器如vi和Emacs都具有Python编辑模式,另有多个专业级的集成开发环境(IDE)可供使用。(《Python3.6编程实践指南 计算机科学入门(原书第3版)》使用IDLE—Python标准安装附带的免费开发环境。)
1.《Python3.6编程实践指南 计算机科学入门(原书第3版)》内容编排方法
《Python3.6编程实践指南——计算机科学入门》(原书第3版)分两部分。第一部分(第1~13章)包括编程基本概念:如何存储和处理信息(数字、文本、列表、集合、字典和文件),如何控制程序的执行(条件和循环),如何组织代码(函数和模块),如何确保程序正确运行(测试和调试),以及如何设计程序(算法)。
第二部分由第14~17章组成,涉及进一步的知识,本部分以第一部分为基础。第14章介绍如何创建和处理自己构建类型的信息,内容包括面向对象的概念,如封装、继承和多态。第15~17章覆盖了测试、数据库和图形用户界面的构建等内容。
2.进一步的阅读资料
关于Python编程的好书有许多。有些适合初学者,如《IntroductiontoComputingandProgramminginPython:AMultimediaApproach》[GE13]和《PythonProgramming:AnIntroductiontoComputerScience》[Zel03];有些适合于具有一定编程经验的读者,如《HowtoThinkLikeaComputerScientist:LearningwithPython》[DEM02],《Object-OrientedProgramminginPython》[GL07]和《LearningPython》[Lut13])。读者也可参考《PythonEducationSpecialInterestGroup(EDU-SIG)》[Pyt11],即使用Python的教育者特别兴趣组。
Python资源
读者掌握足够的Python编程知识后,建议学习第二种编程语言。有很多语言可供选择,如大家熟知的C、Java、C#和Ruby。Python和这些语言属于同一类。但是,如果能学习一种需要不同思维方式的编程语言,如Racket、Erlang和Haskell,则可以成为一名更好的程序员。总之,强烈建议读者学习第二种编程语言。
3.读者能学到什么
《Python3.6编程实践指南——计算机科学入门》(原书第3版)将提供以下内容:
1)为读者展示如何开发和使用程序解决实际问题。多数例子来自科学和工程问题,但是其思想也适用于其他领域。
2)讲解Python的核心特色。大多数编程语言都具有这些特色,因此,无论读者所学的下一种语言是什么,这些知识都会使读者获益。
3)讲解编程的思维方法。特别是,介绍如何将复杂问题分解为简单问题,如何将简单问题的解组合起来,从而创建完整的应用程序。
最后,介绍一些工具。有些工具可以帮助读者提高编程效率,有些工具有助于读者的应用程序解决更大规模的问题。
4.在线资源
《Python3.6编程实践指南——计算机科学入门》(原书第3版)的所有源代码、印刷错误、论坛、安装指引和习题解都可以在以下网站找到:http://pragprog.com/book/gwpy3/practical-programming。


其他推荐