本书以数据的处理和分析为主题,强调编程的基础和实践,全面涵盖Python的特性和用法。本书分为五部分,第一部分介绍计算机设备的一般概念和一些计算机术语,;第二部分开始介绍编程的基本知识,包括入门知识和控制语句,为后续内容做铺垫。第三部分讲述数据结构和函数,包括字符串、列表和元组、、字典和集合、文件、函数、算法和程序等进阶内容,有助于读者提升编程技能;第四部分重点介绍如何使用类定义数据结构和算法、开发程序等,培养读者运用Python语言来实现基本的计算思想和策略的能力;第五部分主要介绍异常、测试和递归,旨在使读者成为更好的程序员。本书深入浅出,每一章节均给出了大量的实例、示范代码和自测练习,便于读者理解和掌握相关知识。读者通过学习本书,不仅能掌握Python语言的基本知识,还能学习如何在实践中运用该语言解决问题。
Python是一种功能强大的脚本编程语言,简洁而优雅,且易于入门,计算机专业人士和非专业人士都能快速入门。在理论方面,本书从计算接科学和教学的角度来组织和规划全书的内容,针对编程初学者的需求,对Python编程相关的知识进行了系统的讲解。在实例方面,本书以数据的处理和分析为主题,强调编程的基础和实践,通过大量案例全面阐释了Python的特性和用法。通过学习本书,读者不仅能掌握Python开发的相关知识,还能具备在实践中运用Python解决实际问题的能力。
本书主要内容:
Python语言的语法和语义。
Python的两种控制结构:选择和循环。
算法和程序的概念,重点强调程序是算法的实现这一观点。
字符串类型以及基于字符串类型的多种方法和函数。
Python中的函数,以及函数的创建方法和工作原理。
列表数据结构以及元组类型。
文件的输入和输出。
在大型项目的开发过程中利用面向对象编程思想来进行程序设计。
提高类设计能力的方法,以及如何用类解决问题。
作者简介
William F. Punch
1989年获得密歇根州立大学计算机科学博士学位,2006年至今担任密歇根大学高性能计算中心(www.hpcc.msu.edu)的主任,具有30多年的计算机教学和实践经验。研究方向包括:基因算法和基因编程,涵盖理论问题(并行GA/GP)和应用问题(设计、布局和调度),以及数据挖掘等。在计算机方面有十多年丰富的教学经验,撰写过多本计算机图书,发表过上百篇关于计算机的论文。
Richard Enbody
Richard Enbody博士是密歇根州立大学计算机科学和工程系教授,具有30多年丰富的计算机教学经验,研究方向包括:计算机安全、计算机体系结构、并行处理等,发表过50多篇关于计算机技术的论文。
计算机科学的第一堂课上都会介绍一种解决问题的新方式——计算,关于计算的第一堂课往往会关注如何“解决问题”。实际上,解决问题的教学与计算机语言的使用往往是交织在一起的。因此,对初学者而言,第一门编程语言的选择至关重要。
基于我在密歇根州立大学30年的本科生计算机教学经验,推荐Python作为编程初学者(不论计算机专业还是非计算机专业的学生)的入门语言。我曾经教授过 Pascal、C/C++等课程,现在教授Python,从中总结出一门好的程序设计入门语言应该具有两个特点。首先,编程语言本身要相对简单易学。由于程序设计的第一堂课大多会介绍如何使用计算的方式来解决问题,以及如何在解决新的问题时准确应用此方法,因此我们希望编程语言本身尽量不要成为学习理解的障碍。Python 的简单性、强大的内置数据结构以及先进的控制结构能让学生更多地将精力集中于寻找解决问题的方法上,而不是将精力花费在学习编程语言上。其次,编程语言应该是实用的。学生在学习时应清楚地知道,所学的知识将来是要使用的。Python语言不仅支持基础的编程概念(例如典型的程序结构、基本的面向对象方法、通用的数据结构等),它还可以进行复杂的计算(例如线程和正则表达式)。Python常用于解决实际问题,如网络访问和数据库操作等。有数千个领域(几乎涵盖了所有我们能想到的)正在使用由活跃的Python社区 (http://pypiPythonorg)提供的工具。学习过一门编程语言的学生(不论是否是计算机专业的学生),在此后的计算机科学课程学习或者职业生涯中,当遇到问题时总会想到“嗨,我要写一个程序来解决它”。我们认为,这正是计算思想的体现。在采用Python作为教学入门语言后,我们每学期都发现了很多这样的成功案例,尤其是学生们反馈Python对他们的学习和工作都大有裨益。
本书以数据的处理和分析为主题,强调编程的基础问题和实践。让学生着手解决实际问题,这些问题所使用的数据可能来自于互联网上的各类公开数据集,也可能是基于学生个人兴趣或工作而生成的数据集。本书同时也强调程序开发,提供了多个能实现的示例以及3章的内容来详细介绍程序的设计和实现。作为课程内容的一部分,学生们对乳腺癌的数据进行分析,对电影演员的关系进行分类,预测太阳风暴所导致的卫星信号中断,并分析其他一些数据。我们还发现,属于CS1的Python课程所涉及的概念,能够与CS2 中的C++课程很好地衔接,对课程素材或者学生来说几乎没有任何影响。
本书的目标如下:
1)针对计算机专业或者非计算机专业的学生,利用Python语言作为工具,教授CS1课程内容中解决问题的方法。
2)提供程序开发示例,关注学生最终可能遇到的各类数据分析问题。
3)为那些学习过CS1但没学过其他编程课程的学生提供基础的编程实践,帮助他们在各自的研究领域获得有作用和有意义的成果。
本书结构
本书的内容安排完全遵循了CS1课程的内容要求,只在少数地方有所不同。例如,本书将字符串的介绍稍稍提前(在介绍函数前),以便能提早进行数据处理。基于同样的考虑,还提前介绍了基本的文件输入与输出,并在后续的章节中进行了更详细的介绍。本书的主题是数据处理,为了服务于这一主题,全书中各部分内容的分布也进行了相应的调整。
采用了“对象运用优先”(objectusefirst)的方法,在前面的章节中,就使用了Python内置的对象及其方法,而用户自定义对象的设计和实现则是在后来才进行介绍。我们发现,当学生领会到Python已有对象的用途后,他们能更好地接受类的概念,并创建自定义的类。换句话说,可以用这种方法来激励学生编写类的需求。函数的介绍分成两部分进行,这是因为 Python能处理可变对象(例如参数列表),对于这类问题的讨论只能在已经理解可变对象列表的前提下才能进行。
第3章、第10章和第13章是关于程序设计的主要章节,提供了“把东西绑在一起”的机会,也展示了如何设计问题的解决方案。还有部分章节可作为学生的补充阅读材料,教师也可选讲其中的部分内容。第0章介绍了背景知识,包括计算机设备的一般概念和一些计算机术语。这些介绍是非常重要的,每个人都应该了解一些关于计算机的知识,这部分内容可作为阅读材料。本书的最后一章在某些课程中也许不会用到。
本书特点
数据处理
数据处理是贯穿本书的主题,示例涉及的范围较广,从文本分析和乳腺癌分类等问题。沿着这条思路,本书提供了一些分析示例,其中用到了一些简单的图表。我们采用已有的软件包来绘制图表,而不是选择自己动手去开发。我们用到了Python内置的包Turtle graphics,和广泛使用的包matplotlib(包含numpy)。
本书尽量采用非数字的示例,但也保留了一些非常经典的数字示例。例如,采用了有理数例子来创建重载运算符的类。我们的目标是尽量选用最好的示例。
解决问题和案例分析
整本书都一直在强调“解决问题”,重点采用了各个击破的思想来设计解决方案。第3章、第10章和第13章全部都是关于程序开发的内容。在这部分内容中,学生将看到大型示例的解决方案。除了设计正确的方案,本书也给出了一些包含错误的示例,并讲解如何改正这些错误。总而言之,本书不是在简单地展示问题的解决方案,而是在展示设计和实现解决方案的全过程。
代码示例
全书共有超过180个示例代码,其中大部分比较简短,但是另一部分是某些大型项目中的代码段。
交互式会话
Python 解释器提供了非常好的机制来简明地阐释编程和解决问题的思想,全书共提供了近250个交互式会话示例来进行阐释。
练习和编程项目
实践,实践,再实践。本书为学生提供了275余个小练习,以及约30个较大型的编程项目(很多项目包含多个部分),以供实践。
自测练习
全书共有24个自测练习,每个练习不少于5个相关的问题。
编程技巧
全书共有40余个特别提示,提醒学生注意一些有用的编程技巧和事项,这些提示都专门标记了出来。
网上补充材料
供学生使用的材料:
- 所有示例的源代码
- 示例中用到的数据集
以上材料可在wwwpearsonhigheredcom/cssupport上免费获取。
供教师使用的材料:
- Powerpoint 幻灯片
- 实验练习
- 用于幻灯片的图片(PDF格式)
- 练习解答
教师可通过访问wwwpearsonhigheredcom/irc 获取补充材料,请在网站注册以获取访问权限,也可以通过本地Pearson Education 代理或发邮件到computing@awcom获取。
Python 2x 与Python 3x
本书内容基于Python 2x(x≥6)版本,之所以没有采用Python 3x版本,是因为目前的Python 3x版本还不能向后兼容标准的Python包,附录D列出了这两个版本之间的差异。在本书所涉及的内容中,两者的差异微不足道,但是支持当前的Python包对于我们所采用的方法而言至关重要,因此,在Python 3x版本还没有对标准包提供支持之前,本书将继续使用Python 2x版本。
致谢
感谢在本书的多个阶段提供了有价值意见的审稿人,他们是:Claude Anderson(罗斯霍曼理工学院)、Chris Brooks(旧金山大学)、Judy Franklin(史密斯学院)、Alan Garvey(杜鲁门州立大学)、Ronald IGreenberg(洛约拉大学)、Andrew Harrington(洛约拉大学)、Steve Harrison(弗吉尼亚理工大学)、Christopher Haynes(印第安纳大学)、Cinda Heeren(伊利诺伊大学香槟分校)、Brian Howard(德堡大学)、Janardhan Iyengar(富兰克林与马歇尔学院)、Andree Jacobson(新墨西哥大学)、John Lasseter(威拉米特大学)、Jim Mahoney(万宝路学院)、Joe Oldham(中心学院)、Holly PattersonMcNeill(刘易斯克拉克州立学院)、John Rabung(兰道夫-梅肯大学)、Ben Schafer(北爱荷华大学)、David GSullivan(波士顿大学)、David ASykes(沃福德大学)。来自密歇根州立大学的人员有:Erik Eid(现在博林格林州立大学),他对本书的初稿提出了非常有价值的反馈意见;Laurie Dillon 采用本书C语言初稿教学并给出了反馈意见;Titus Brown从Python的角度出发阅读了初稿并给我们鼓励。高中生Angus Burton从初学者的角度给出了有益的意见。Sirkanth Vudayagiri 提供了一些很棒的练习题。Scott Buffa 对最初的几稿进行了校对。暑期CSE 231 课程班提供了很多练习题,班上的学员有:Mohammed Alwahibi、Younsuk Dong、Michael Ford、Gabriel Friedman、Adam Hamilton、Meagan Houang、Ruba Jiddon和Adam Palmer。我们的课程设置由Mark Mcllen 负责,他总是乐于给出好的建议。Larry Nyhoff(卡尔文大学)在一次晚宴上和我们分享了他非常有价值的见解,而这正是一切的开始。
WFPUNCH
RJENBODY
计算机\程序设计
Python是一种功能强大的脚本编程语言,简洁而优雅,且易于入门,计算机专业人士和非专业人士都能快速入门。在理论方面,本书从计算接科学和教学的角度来组织和规划全书的内容,针对编程初学者的需求,对Python编程相关的知识进行了系统的讲解。在实例方面,本书以数据的处理和分析为主题,强调编程的基础和实践,通过大量案例全面阐释了Python的特性和用法。通过学习本书,读者不仅能掌握Python开发的相关知识,还能具备在实践中运用Python解决实际问题的能力。
本书主要内容:
Python语言的语法和语义。
Python的两种控制结构:选择和循环。
算法和程序的概念,重点强调程序是算法的实现这一观点。
字符串类型以及基于字符串类型的多种方法和函数。
Python中的函数,以及函数的创建方法和工作原理。
列表数据结构以及元组类型。
文件的输入和输出。
在大型项目的开发过程中利用面向对象编程思想来进行程序设计。
提高类设计能力的方法,以及如何用类解决问题。
值的一致性、自检和运算符重载,以及递归。
Python的异常和内置的测试功能。
(美) William F. Punch Richard Enbody 著:暂无简介
张敏 等译:暂无简介
Python是诞生于1989年的一种开放源代码的脚本编程语言,简洁而优雅,且功能强大。它的语言风格清晰,具有较强的可读性,应用非常广泛。
本书的两位作者具有近30年的大学计算机教学与实践经验,他们在长期的教学实践中发现Python非常适合作为学习计算机编程的第一门语言,于是编写了这本教材。
关于Python的书很多,其中不乏一些出色之作。作为一位计算机教学工作者,我深感本书是一本值得推荐的教材。它具有如下的特色:
(1)内容丰富,安排合理。本书不仅涵盖了Python程序设计的各个方面,还介绍了计算机科学的发展、面向对象编程、数据挖掘、模式识别等相关内容。本书自始至终从学习者的角度出发,采用了“先用后解释”等方式来组织内容,某些概念在不同的章节中逐步深入,章节安排合理且人性化。
(2)理论和实践紧密结合。本书的核心是“数据处理”,内容组织上非常注重理论联系实践。每章不仅给出了大量的实例和代码示范,而且还有编程技巧、总结、自测练习、课后习题和编程项目等多个模块。
(3)选材新颖,趣味性强。本书的实例设计范围很广,极富趣味性。NBA、好莱坞、标准普尔指数、Google、乳腺癌等实例与读者的生活紧密相关,容易调动学习的积极性。此外文本分析、分类器、数据挖掘等练习设计也非常巧妙,开拓了学习者的视野,为未来进行更深入的研究奠定了基础。
通过学习本书,读者能够快速轻松地掌握Python语言,并且还有可能对计算机科学产生浓厚的兴趣。在国内的计算机本科教学中,Python语言不是常用的教学语言,也鲜有教材具有本书的丰富性和趣味性。
本书的翻译工作主要由张敏完成,林杰、伍敏如、张宗辉等人也为本书的翻译工作做出了贡献,在此也要感谢机械工业出版社华章分社的各位编辑对翻译工作提出的许多中肯的意见。
在本书的翻译过程中,译者深感在专业功底和文化背景上都有所欠缺,难免会有遗憾,欢迎读者批评指正。开放是Python不断完善和进步的动力,希望大家互相帮助,共同进步。
译者
译者序
前言
第一部分关于计算机的思考
第0章计算机科学研究
01为什么要研究计算机科学
011计算机科学的重要性
012计算机“科学”
013通过编程学习计算机科学
02编程的困难和使命
021困难1:同时做两件事
022困难2:什么是好程序
023程序的使命
03选择一种计算机语言
031各种计算机语言
032为什么选Python
033Python是最好的程序语言吗
04什么是计算
05什么是计算机
051自然界中的计算
052人类制造的计算机
06现代电子计算机
061就是开关
062晶体管
07从更高层面来了解现代计算机
08数据表示
081二进制数据
082使用二进制
083局限性
084字符表示
085其他数据表示
086数字代表什么
087数据量
088数据量有多大
09后续章节概述
010总结
第二部分开始编程
第1章入门
11练习,练习,再练习
12快速入门——计算圆周长的程序
13交互式会话
14程序组成部分
141模块
142表达式和语句
143空白
144注释
145Python 的特殊元素:标记
146对象命名
15变量
16对象和类型
161数字
162其他内置类型
163对象类型:非变量类型
164创建新值
17运算符
171整数运算符
172浮点运算符
173混合运算符
174运算符顺序和圆括号
175增强的赋值运算符:快捷方式
18第一个模块:math模块
19开发算法
110总结
111视觉场景:海龟绘图
习题
编程项目
第2章控制语句
21选择语句:if
211利用布尔值做决定
212if 语句
213示例:在篮球运动中,领先多少分才安全
214循环
215例子:寻找完全数
216例子:对数字分类
22深入控制语句
221真与假:布尔值
222布尔变量
223关系运算符
224布尔运算符
225优先级
226布尔运算符示例
227另一种赋值方式
228用于判定的选择语句
229Python判定语句进阶
2210循环:while语句
2211信号量循环
2212循环总结
2213for语句进阶
2214嵌套
2215冰雹序列示例
23视觉场景:用pylab对数据绘图
231使用列表和第一次绘制
232更有趣的绘图:正弦波
24计算机科学观点:最小的通用计算
25总结
习题
编程项目
第3章算法和程序开发
31什么是算法
32算法特征
321算法和程序
322细化
323有效性
324指定行为
325通用算法
326真的可以实现一切吗
33程序是什么
331可读性
322鲁棒性
333正确性
34程序设计策略
341参与并提交
342了解,然后想象
343编程之前先思考
344实验
345简化
346停下来思考
347放松:让自己休息一下
35简单示例
351搭建框架
352输出
353输入
354计算
36总结
习题
第三部分组织:数据结构和函数
第4章字符串
41字符串类型
411三重引号字符串
412非显示字符
413字符串表示形式
414字符序列
415索引和分片
42字符串操作
421连接(+)和重复(*)
422“+”什么时候表示加法运算,什么时候表示连接运算
423比较运算符
424in运算符
425字符串集合是不可变的
43函数和方法预览
431第一步:什么是函数
432选择方法的名字和参数
433字符串方法
434字符串函数
44字符串的格式化输出
441描述符码
442宽度描述符
443浮点数精度描述符
45字符串与控制语句
46处理字符串
461示例:记录人名
462回文
47示例:计算扑克牌
48总结
习题
编程项目
第5章函数快速入门
51函数是什么
52Python 函数
53函数控制语句
531函数控制语句详解
532另一个函数示例
533函数示例:猜词
534函数调用函数
535什么时候使用函数
536如果没有return语句会如何
537如果有多条return语句会如何
54视觉场景:用海龟绘图法绘制美国国旗
55总结
习题
编程项目
第6章列表和元组
61什么是列表
62操作列表
621索引和分片
622运算符
623函数
624列表循环
63列表新内容
631列表可变性
632列表方法
64range、split及其他函数和方法
641range、split和多重赋值
642使用join在列表和字符串之间转换
643sorted 函数
65示例
651字谜
652示例:文件分析
66可变对象及其引用
661深拷贝与浅拷贝
662可变与不可变
67元组
671从列表到元组
672为什么需要元组
68列表:数据结构
681数据结构示例
682数据结构的另一个示例
69算法示例:美国环境保护署通车里程数据
610列表解析
611视觉场景:更多绘制任务
6111numpy阵列
6112绘制三角函数
612总结
习题
编程项目
第7章深入了解函数
71函数调用函数
72作用域
721实参、形参和命名空间
722传递可变对象
723返回复杂对象
724重构evens
73默认值以及形参为关键字
731示例:默认值和参数关键字
732默认值问题
74函数和对象
75示例:确定最终成绩
751数据
752设计
753函数:weightedGrade
754函数:grade
755函数:main
756使用示例
76“传值”或者“传引用”
77总结
习题
编程项目
第8章字典和集合
81字典
811字典示例
812Python 字典
813字典索引和赋值
814运算符
82单词计数示例
821统计字符串中的单词数
822《葛底斯堡演说》中的单词出现频率
823输出和注释
83示例:周期表
831使用CSV文件
832算法概述
833实现分治的函数
84集合
841集合的历史
842集合的组成
843Python 集合
844Python集合的方法、运算符和函数
845集合方法
85集合应用
851不同文件中单词之间的关系
852输出和注释
86作用域:完整的故事
861命名空间和作用域
862作用域搜寻规则
863局部命名空间
864全局命名空间
865内置模块
866封闭式变量
87Python指针:使用zip创建字典
88视觉场景:词频条形图
881正确获取数据
882标签和xticks命令
883绘图
89总结
习题
编程项目
第9章文件
91什么是文件
92存取文件:读取文本文件
921其他文件存取方法
922数据流
93存取文件:写文本文件
94在程序中存取文本文件
95创建文件和重写文件
951通用新行格式
952文件内移动
96关闭文件
97CSV文件
971CSV模块
972CSV Reader
973CSV Writer
974示例:更新某些成绩
98示例:反复提示,要求输入正确的文件名
99模块:os
991目录/文件夹的结构
992os模块函数
993os模块示例
910总结
习题
编程项目
第10章程序开发进阶
101简介
102分治
103乳腺癌分类
1031问题
1032方法:分类
1033训练和测试分类器
1034构造分类器
104设计分类器算法
1041先分解,再合并
1042数据结构
1043文件格式
1044makeTrainingSet函数
1045makeTestSet函数
1046trainClassifier函数
1047第2轮修改后的trainClassifer
1048用新数据测试分类器
1049reportResults函数
105在完整数据上运行分类器
106其他有趣的问题
1061标签云
1062标准普尔500预测
1063用国旗预测宗教
107总结
习题
编程项目
第四部分类:自定义数据结构和算法
第11章类
111面向对象编程
1111Python是面向对象的
1112OOP特性
112使用OOP
113使用类和实例
1131内置类和实例
1132第一个类
1133修改属性
1134实例和类之间的特殊关系:instanceof
114对象方法
1141使用对象方法
1142编写方法
1143特殊参数self
1144方法是类实例的接口
115融入Python类模型
1151程序员定义的类
1152Student类
1153Python标准方法
1154三种角色:类设计者、程序员和用户
116示例:Point类
1161构造函数
1162距离
1163两点求和
1164改进Point类
117Python和OOP
1171封装性
1172继承
1173多态性
118Python和其他OOP语言
1181公有与私有
1182使用双下划线表示私有
1183Python的宗旨
1184修改实例
119总结
习题
编程项目
第12章类进阶
121更多类属性
122Python实现机制
1221类、类型与自检
1222运算符重载
123自定义运算符重载
124创建有理数类
1241生成类
1242分数加法回顾
1243分数加法
1244相等和分数化简
1245应用分治
125错误消息
1251自检
1252修复int+Rational错误
126继承
1261“寻找属性”游戏
1262使用继承
1263实例:物理学标准模型
127总结
习题
第13章使用类开发程序
131捕食问题
1311规则
1312面向对象的模拟
132类
1321Island类
1322捕食者和猎物、动物种类
1323捕食者类和猎物类
1324对象图
1325填充Island
133添加行为
1331细化:添加移动
1332时间循环仿真
134逐步求精
1341改进的时间循环
1342繁殖
1343进食
1344时钟节拍
135细化问题
1351移动多少次
1352动物数量的图形化
136总结
习题
第五部分成为更好的程序员
第14章异常和异常处理
141简介
142基本的异常处理
143有关异常的哲学
144异常:else和finally
145异常的用法
1451检查输入
1452检查文件打开
146深入异常
1461raise
1462自定义异常
147示例:密码管理
148总结
习题
第15章测试
151为什么要进行测试
1511错误类型
1512“bug”和调试
152测试类型
1521测试很难
1522测试的重要性
153示例
1531NBA效率
1532基本算法
154混合测试
1541捕捉用户错误
1542捕获开发者犯的错误
155自动测试
1551doctest
1552其他类型的测试
156总结
习题
第16章递归:另一种控制机制
161什么是递归
162数学和兔子
163自定义递归:反转字符串
164递归如何实现
1641栈的数据结构
1642栈和函数调用
165用递归表示图形
1651递归树
1652Sierpinski三角形
166从递归到非递归
167总结
168习题
附录
附录A开始使用Python
附录B用海龟绘图法进行简单绘图
附录C绘图和数值工具:快速浏览
附录DPython 30
附录EASCII码表
附录F优先级