书海网短评:
适读人群:初学Python语言的程序员,高等院校相关专业的本科生,对Python编程感兴趣的初学者1)多伦多大学教授带来的经典编程入门书,基于Python3.6,数万学生课堂使用。2)无需任何编程经验!循序渐
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。









