ImageVerifierCode 换一换
格式:PDF , 页数:172 ,大小:712.34KB ,
资源ID:3430298      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bingdoc.com/d-3430298.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(像计算机科学家一样思考python.pdf)为本站会员(wj)主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(发送邮件至service@bingdoc.com或直接QQ联系客服),我们立即给予删除!

像计算机科学家一样思考python.pdf

1、-1-像计算机 科学家那样思考 像计算机 科学家那样思考 (中文版)(中文版)-2-目 录 贡献者名单.I 前言.V 序言.VII 1 程序之道.1 1.1 Python 程序语言.1 1.2 程序是什么?.3 1.3 除虫是什么?.3 1.4 语法错误(Syntax errors).4 1.5 执行错误(Runtime errors).4 1.6 语意错误(Semantic errors).4 1.7 实验性除虫.4 1.8 形式语言及自然语言.5 1.9 第一个程序.7 1.10 术语.7 1.11 练习.9 2 变数、表达式及陈述.11 2.1 数值与型态.11 2.2 变数.12 2.

2、3 变量名称与关键词.13 2.4 陈述.14 2.5 表达式求值.14 2.6 运算子与操作数.15 2.7 运算的次序.16 2.8 字符串的运算.16 2.9 输入.17 2.10 组合.17 2.11 批注.18 2.12 术语.18 2.13 练习.20 3 函数.22 3.1 函数定义及用法.22 3.2 执行流程.24 3.3 参数、自变量以及 import 陈述.24 3.4 组合.26 3.5 区域的概念:变数及参数.26 3.6 堆栈图.27 3.7 术语.28 3.8 练习.30 4 条件式.32 4.1 余数运算子.32 4.2 布尔值与表达式.32 4.3 逻辑运算子

3、.33 4.4 条件执行.33-3-4.5 替代执行.34 4.6 炼状条件式.35 4.7 巢状条件式.35 4.8 return 陈述.36 4.9 键盘输入.36 4.10 型态转换.37 4.11 Gasp.39 4.12 术语.40 4.13 练习.41 5 多效函数.46 5.1 传回值.46 5.2 程序开发.47 5.3 函数的组合.49 5.4 布尔函数.50 5.5 函数(function)型态.50 5.6 有型的程序设计.51 5.7 三引号字符串.52 5.8 用 doctest 做单元测试.52 5.9 术语.54 5.10 练习.55 6 重复.60 6.1 多重

4、指派.60 6.2 更新变数.60 6.3 while 陈述.61 6.4 追踪一个程序.62 6.5 计算数字.63 6.6 缩写指派.64 6.7 表格.65 6.8 二维表格.66 6.9 封装与一般化.66 6.10 更多的封装.67 6.11 区域变量.68 6.12 更多的一般化.68 6.13 函数.70 6.14 牛顿勘根法.70 6.15 算法.70 6.16 术语.71 6.17 练习.72 7 对照上面的 doctests 检查你的答案。7.字符串.75 7 7.字符串.76 7.1 复合数据型态.76 7.2 长度.76 7.3 走访以及 for 循环.77 7.4 字

5、符串切片.78 7.5 字符串比较.79 7.6 字符串是不可变的.79-4-7.7 in 运算子.79 7.8 A find 函数.80 7.9 循环及参数.81 7.10 选择性参数.81 7.11 string 模块.82 7.12 字符的分类.83 7.13 字符串格式化.84 7.14 索引.86 7.15 练习.87 8 案例研究:Catch.91 8.1 起步.91 8.2 用 while 移动球.91 8.3 程度的调整.92 8.4 使球弹回.93 8.5 break 陈述.93 8.6 响应键盘.94 8.7 检查碰撞.95 8.8 组合这些片段.96 8.9 显示文字.9

6、7 8.10 抽象化.98 8.11 术语.101 8.12 练习.102 8.13 专题:pong.py.102 9 Tuple.104 9.1 可变性与 tuple.104 9.2 Tuple 指派.105 9.3 Tuple 做为传回值.106 9.4 随机数字.106 9.5 随机数字列表.107 9.6 计算.108 9.7 许多分区.109 9.8 一个单程的解决方法.111 9.9 术语.112 10 缺少.114 11 档案和例外.115 11.1 文字文件.117 11.2 写入变数.119 11.3 目录.121 11.4 腌制.122 11.5 例外.123 11.6 术

7、语.126 12 类别与对象.128 12.1 使用者设定的复合型态.128 12.2 属性.129 12.3 以实例作为自变量.130 12.4 相同性.130-5-12.5 矩形.132 12.6 以实例作为传回值.133 12.7 物件是可变的.133 12.8 复制.134 12.9 术语.136 13 类别与函数.137 13.1 Time 类别.137 13.2 纯函数.137 13.3 修饰子.139 13.4 哪一个比较好?.141 13.5 原型开发 V.S.计划.141 13.6 一般化.142 13.7 算法.143 13.8 术语.143 14 类别与方法.145 14

8、.1 对象导向功能.145 14.2 printTime.145 14.3 另一个范例.147 14.4 一个更为复杂的范例.148 14.5 选择性自变量.149 14.6 初始化方法.150 14.7 重新审视 Points.152 14.8 运算子多载.153 14.9 多形(Polymorphism).154 14.10 术语.156 -I-贡献者名单 为阐述自由软件基金会的哲学,这本书是自由的,就像自由言论(free speech)一样,不过不一定像免费披萨(free pizza)一样免费。本书经由合作产生,如果没有 GNU Free Documentation License,这种

9、类型的合作就不可能发生。所以我们想要感谢自由软件基金会发展这个授权,而且让我们得以取用。我们同时也想感谢一百多个眼睛锐利而且体贴的读者,他们在过去数年间传送给我们建议和修正。依照自由软件的精神,我们决定用贡献者名单的形式表示我们的感谢。可惜的是,这份名单并不完整,但我们会尽最大努力使其包含最新讯息。如果要包含所有仅传送一两个错误的人员,这份名单会变得过于庞大。你除了有我们的感谢,还得到了个人满足感,因为对你和所有使用本书的人来说,你让这本对你有用的书更完善了。第二版名单新增的部分是那些目前仍做出贡献的人。如果你有机会检视这份名单的话,你应该明暸这里的每个人仅借着通知我们,就让你和后面的读者不会

10、因技术上的错误,或不甚清楚明白的解释而疑惑。虽然经过这么多次修正后,似乎不太可能再出错,不过本书中可能仍有些错误。如果你看到其中一个,我们希望你能花点时间联络我们。电子邮件地址是:。如果因你的建议而做出实质改变,你将会被加入下一版本的贡献者名单中(除非你要求略去姓名)。谢谢你!0.1.1 第二版第二版?特别感谢 Jeff 2007-2008 学年 HB-Woodlawn 课程中计算机科学班级的学生:James Crowley、Joshua Eddy、Eric Larson、Brian McGrail 和 Iliana Vazuka。你们愿意作为新章节写好时的 beta 测试者,并忍受随着你们的

11、响应而经常进行的修订,在在都证明是无价的。也由于你们,这本书有真正由学生测试过的文字。?Ammar Nabulsi 送来了关于第一章和二章为数众多的修正。?Aldric Giacomoni 指出了第五章我们关于斐波纳契数列的一个错误。?Roger Sperberg 送来数个拼字修正,并指出第三章中一个逻辑混乱的段落。-II-?Adele Goldberg 在 PyCon 2007 和 Jeff 坐下来谈了一会,并给了他一份关于整本书的建议和修正清单。?Ben Bruno 送来关于第四、五、六和第七章的修正。?Carl LaCombe 指出我们在第六章错用了 commutative 这个词,其实

12、 symmetric 才是正确的词。?Alessandro Montanile 送来在第三、十二、十五、十七、十八、十九和二十章中,程序范例和文字错误的修正。?Emanuele Rusconi 在第四、八和十五章找到错误。?Michael Vogt 回报第六章中一个范例的缩排错误,并送来第一章关于 shell vs.script 一节的建议,以改善理解度。0.1.2 第一版第一版?Lloyd Hugh Allen 送来 8.4 节的一个修正。?Yvon Boulianne 送来第五章中一个语义错误的修正。?Fred Bremmer 提交了一个 2.1 节的修正。?Jonah Cohen 写了一

13、个 Perl 脚本,将本书的 LaTeX 原始档转换成美丽的 HTML 码。?Michael Conlon 送来第二章中一个文法修正,并改善第一章中的写作风格,另外他也发起了关于编译器技术观点的讨论。?Benoit Girard 送来对于 5.6 节一个可笑错误的修正。?Courtney Gleason 和 Katherine Smith 写了 horsebet.py,它被用来当成本书早期版本中的实例探讨。他们的程序现在可以在网站上找到。?Lee Harr 所提交的错误多到我们这里的空间不足以一一列出,他其实应该被列为本文主要编辑之一。?James Kaylin 是个使用本文的学生。他提交了许

14、多修正。?David Kershaw 修好了 3.10 节中坏掉的 catTwice 函数。?Eddie Lam 送来了许多关于第一、二和第三章的修正。他同时也修好了 Makefile,让它可以在第一次执行时,建立一个索引,并且帮助我们设定了版本管理系统。?Man-Yong Lee 送来 2.4 节中范例程序代码的一个修正。?David Mayo 指出第一章中 unconsciously 这个字应该更正为 subconsciously。-III-?Chris McAloon 送来 3.9 和 3.10 节中的数个修正。?Matthew J.Moelter 是个长期贡献者,他送来对本书为数众多的

15、修正和建议。?Simon Dicon Montford 回报了第三章中遗漏的函数定义和数个拼字错误。他同时也找到了第十三章中 increment 函数中的错误。?John Ouzts 修正了第三章中 return value 的定义。?Kevin Parks 送来关于如何推广本书的评论和建议。?David Pool 送来第一章术语中的一个拼字错误,同时也用他亲切的文字鼓励我们。?Michael Schmitt 送来关于档案和例外章节的一个修正。?Robin Shaw 指出 13.1 节的一个错误,printTime 函数被使用在范例中,却没有定义。?Paul Sleigh 发现了一个第七章中的

16、错误,并且在 Jonah Cohen 从 LaTeX 生成 HTML 的 Perl 脚本中找到一个臭虫。?Craig T.Snydal 在德鲁大学中的一个课程中测试本文。他贡献了数个珍贵的建议和修正。?Ian Thomas 和他的学生在一堂程序设计课程中使用本文。他们是首批测试本书后半章节的人员,而且他们做出了为数众多的修正和建议。?Keith Verheyden 送来一个关于第三章的修正。?Peter Winstanley 让我们知道第三章中的拉丁文里一直存在的错误。?Chris Wrobel 修改了档案 I/O 和例外章节中的程序代码。?Moshe Zadka 对这个计划做出了无法估计的贡

17、献。除了撰写 Dictionaries 章节的初稿外,他还在本书的早期阶段提供了不间断的指导。?Christoph Zwerschke 送来数个修正和教学法上的建议,并解释了 gleich 和 selbe 之间的不同。?James Mayer 送来许多拼字和排版错误,包含贡献者名单中的两个。?Hayden McAfee 在两个范例间抓到了一个有可能导致迷惑的不一致之处。?Angel Arnal 是国际翻译团队的一员,致力于本书的西班牙文版本。他也同时找到了英文版中的数个错误。?Tauhidul Hoque 和 Lex Berezhny 绘制了第一章插图,并改善了许多其它的插图。?Dr.Mich

18、ele Alzetta 在第八章抓出一个错误,并送来一些关于斐波那契与老处女(Old Maid)的有趣教学法评论和建议。?Andy Mitchell 找出第一章中的一个拼字错误和第二章中失效的范例。?Kalin Harvey 对于第七章提出了增进理解度的建议,并抓出一些拼字错误。-IV-?Christopher P.Smith 抓出了数个拼字错误,并帮忙我们准备升级本书到 Python 2.2 版。?David Hutchins 在前言中找出一个拼字错误。?Gregor Lingl 在奥地利维也纳的高中里教授 Python。他正进行本书的德文翻译,他在第五章中抓出一些不良的错误。?Julie

19、Peters 在序言中抓出一个拼字错误。0.1.3 正体中文版正体中文版?正体中文版由自由软件铸造场同仁于 2008 年开始翻译,中文书名译为 如何像计算机科学家一样思考,其中:?张凯庆翻译本书正体中文版第一到八章。?徐孟逵校订本书正体中文版第一到八章,并翻译第九到十四章。-V-前言 David Beazley 著 作为教育家、研究者及书籍作者,我很高兴看到这本书的完成。Python 是个有趣并且非常易用的程序语言,在过去几年里,Python 逐渐地受到欢迎。Guido van Rossum 在十多年前开发了 Python,其简单的语法与整体感觉则是得自于 ABC,这个 1980 年代发展的教

20、学语言。然而,Python 也被设计成可以解决真实的问题,并且也从其它程序语言如 C+、Java、Modula-3 和 Scheme 等,借用了各式各样的特征。正因如此,Python 最显而易见的特色之一就是它广泛吸引了专业软件开发者、科学工作者、研究者、艺术家及教育家。虽然 Python 吸引了不同社群的人士,你可能还是会怀疑 为何选用 Python?,或者 为甚么教导用 Python 撰写程序?回答这些问题可不简单-特别是当大众的意见都站在,如 C+和 Java 这些自讨苦吃的选择这一边的时候。然而,我想最直接的答案就是用 Python 写程序可以单纯地得到许多乐趣,并且更有生产力。当我教

21、授计算机科学课程时,我希望教学题材涵盖重要概念,又能对学生来说有趣且迷人。可惜的是,程序设计入门课程目前倾向投注过多焦点在数学抽象概念上,且让学生因恼人问题而沮丧,如语法、编译以及看起来晦涩难解的规则等低阶细节。尽管这些抽象及形式对专业软件工程师和计划继续学习计算机科学的学生来说,非常重要,在一个入门性的课程采取这种方式大部分只会使计算机科学更无趣。教课的时候,我可不想面对一整间无精打采的学生。我宁愿看到他们透过探索不同的想法、采取有创意的方式、打破成规并从错误中学习,以尝试解决有趣的问题。这么做的原因是,我不想浪费半个学期试着厘清含糊的语法问题、难以理解的编译器错误讯息,或是一个程序可能造成

22、一般性保护错误的数百种方式。我喜欢 Python 的原因之一,就是它在实做与概念上取得了很好的平衡。既然 Python 是直译的,初学者几乎可以立刻学会这个语言,并做些美妙的事,而不会迷失在编译与连结的问题中。更有甚者,Python 随附大型的模块库,能够应用在各种工作上,包括网络程序设计到图形处理等。具有如此实用的重点是吸引学生注意力的绝佳方式,并且能让他们完成重要的项目。然而,Python 也可以作为介绍重要计算机科学概念的优良基础。由于 Python 完整支持程序和类别,便可逐步引导学生认识程序抽象化、数据结构,以及对象导向程序设计等课题,这些全都可以应用在往后 Java 或 C+的课程

23、上。Python 还向函数型程序语言借了许多功能,可以用来介绍这些以往是在 Scheme 及 Lisp 的课堂上详细介绍的概念。-VI-读了 Jeffrey 的序文,我被他的评论所感动,Python 使他看见更高层次的成就以及较低层次的挫折,而他可以工作得更快且获得较佳结果。尽管这些评论是指他的入门课程,我有时会以同样的理由,将 Python 应用在芝加哥大学的进阶研究所计算机科学课程。在这些课程里,我不断地面对将大量困难的课程资料,包含在极短的九星期学季中这种让人气馁的工作。虽然我必定可以承受使用像 C+这种语言所带来的大量痛苦及折磨,我常常发现这种方式有着不良的后果,特别是这些课程的主题不

24、只是关于程序设计时。我发现使用 Python 让我能够较为集中在实际的主题上,同时也使学生能够完成重要的课程作业。虽然 Python 仍是年轻、发展中的语言,我相信它在教育上会有耀眼的未来。这本书在这方向上是重要的一步。David Beazley,芝加哥大学,Python Essential Reference 作者 -VII-序言 By Jeffrey Elkner 本书的存在归功于网络及自由软件运动所实现的合作方式。它的三位作者-一位大学教授、一位高中老师,以及一位专业程序设计师-尚未见过面,但是我们已经能够紧密合作,并且受到许多愿意付出时间与心力的杰出人士帮助,使得这本书更臻完善。我们认

25、为本书证明了此种合作方式的优点以及未来的可能性,而这样的合作架构已经由 Richard Stallman 和自由软件基金会运作多年。我如何及为甚么使用我如何及为甚么使用 Python 1999 年,大学委员会的先修大学计算机科学课程(Advanced Placement Computer Science)考试,第一次用 C+。和全国各地的许多高中一样,维吉尼亚州阿灵顿郡约克敦高中的计算机科学课程也直接受到变更语言的决定影响,我就在此所高中任教。在此之前,Pascal 是我们一年级及先修课程的教学语言。为了和过去让学生有两年的时间接触相同语言的作法一样,我们决定在 1997 到 1998 学年的

26、一年级课程改用 C+教学,如此我们便能衔接大学委员会对下年度先修计算机科学课程的改变。两年后,我确信使用 C+为学生介绍计算机科学,不是个适当的选择。虽然它的确是个非常强大的程序语言,但它也是个极度难以学习与教导的语言。我发现我自己不断地对抗 C+困难的语法以及处理相同事务的多重方式,结果让我无谓地失去了许多学生。我确信一定会有更适合一年级课程的语言,于是开始寻找一个可以替代 C+的选择。我需要一个能够运作在我们 GNU/Linux 实验室语言,但同时也要能够运作在大部分学生家里的 Windows 及 Macintosh 平台。我希望它是个自由软件,好让学生不管收入多少,都能够在家使用。我想要

27、一个专业程序设计师使用的语言,并且有个活跃的开发社群。它必须同时支持程序式及对象导向程序设计。最重要的是,它必须容易学习和教授。当我以这些条件研究过许多选择后,Python 脱颖而出成为此项工作的最佳候选人。我请一位聪明的约克敦高中学生,Matt Ahrens,尝试使用 Python。他不但在两个月内学会这个语言,而且写了一个叫做 pyTicket 的应用程序,让我们的人员可以透过网络回报技术-VIII-问题。我知道 Matt 无法在这么短的时间用 C+完成如此规模的应用程序,这项成就和 Matt 对 Python 的正面评价,显示 Python 是我所寻找的解决方案。寻找教科书寻找教科书 我

28、决定在下年度的两个计算机科学概论课程都使用 Python 后,最迫切的问题是缺少一本可用的教科书。自由文件解决了这个问题。Richard Stallman 在今年稍早向我介绍了 Allen Downey 这个人。我们两个都写信向 Richard 表达发展自由教育资料的兴趣。Allen 已经写了本一年级计算机科学的教科书,如何像计算机科学家一样思考。当我读了这本书,我立即知道我想将它应用在我的课程中。它是我见过最清楚且最有帮助的计算机科学教科书。它突显出在写程序时的思考过程,而非特定语言的功能。阅读它使我马上变成了更好的老师。如何像计算机科学家一样思考不只是一本出色的书,并且它是以 GNU 公众

29、授权发布,这就是说它可以自由使用,并可依使用者需要修改。一旦我决定使用 Python 后,我想到我可以转换 Allen 这本书的原始 Java 版本到新的语言。也许我本来无法自己撰写一本教科书,但从 Allen 的书改写使我可以达成这个工作,这同时也证明了在软件上运作良好的协力发展模式,也可以使用在教学资料上。过去两年来编写这本书对学生及我都受益匪浅,而我的学生在此过程中扮演了一个重要的角色。既然我够在有人发现拼写错误或是阅读困难的章节时立即修正,因此我在课文因他们的建议而修正时,为他们加分,以鼓励他们寻找本书的错误。这么做有着双重的好处,一是鼓励他们更加小心地阅读课文,另一个好处则是让课文由

30、它最重要的评论者-使用它学习计算机科学的学生-澈底审查。针对本书后半部关于对象导向程序设计的部分,我知道我需要一个比我更有实际程设经验的人来使它更为正确。本书在大部分时间处于未完成的状态,直到开放源码社群再次提供完成它所需要的工具。我收到一封 Chris Meyers 寄来的电子邮件,表达他对本书的兴趣。Chris 是一位专业程序设计师,他去年在奥勒岗州尤金市的 Lane 小区大学开始使用 Python 教授程序设计课程。教授这门课程让 Chris 找到这本书,而且他立即开始帮忙本书的编撰。在学年结束前,他在我们的网站 http:/ 设置了一个指南手册计划,叫做 Python for Fun,

31、他并担任指导教师,与我最顶尖的学生一起合作,带领他们进入超出我能力之外的领域。-IX-用用 Python 介绍程序设计介绍程序设计 过去的两年里,转换及使用如何像计算机科学家一样思考的过程已经证实 Python 适于教导初学的学生。Python 极其简化程序设计范例,并且让重要的程序设计观念较容易教授。课文中的第一个范例说明了这一点。传统的 Hello,world 程序,在本书的 C+版本看来如下:#include void main()cout Hello,world.print 1+1 2 这个例子的第一行,是在 Unix 命令提示符下启动 Python 直译器的命令。下三行是直译器提供的

32、讯息。第四行以 起始,这是 Python 提示符。直译器使用这个指示符表示它已准备好接受指示。我们输入 print 1+1,直译器回应结果为 2。另外,你也可以将程序写入一个档案中,然后利用直译器执行档案内容。这样的档案就叫做脚本脚本。例如,我们使用文字编辑器建立一个名为 firstprogram.py 档案,并包含下列内容:print 1+1 传统上,包含 Python 程序的档案有着以.py 结尾的名称。要执行这个程序,我们必须要告诉直译器脚本的名称:$python firstprogram.py 2 这些例子说明 Python 运作在 Unix 命令列的情形。在其它程序开发环境中,程序执

33、行的细节可能会不一样。另外,大多数的程序比这个例子有趣许多。-3-本书范例同时使用 Python 直译器和脚本。你将可以分辨该使用哪一种方式,因为 shell 模式范例永远以 Python 提示符起始。在 shell 模式中工作可以方便测试简短的程序代码,因为你可以获得立即回馈。请将它想成用来帮你找出问题答案的便条纸。任何长于数行的程序都应该放到脚本中。1.2 程序是什么?程序是什么?程序程序是一连串具体说明如何计算的指令。这种计算可能是数学的,像是找到方程组的解或是多项式的根,也可能是一种象征性的计算,就像在文件中搜寻并取代文字,或(说来也奇怪)编译一个程序。不同程序语言的详细情况看起来都不一样,但有一些基本的指令,几乎在每种程序语言中都可以发现:输入:从键盘、档案或是其它装置取得数据;输出:在屏幕上显示数据,或着是将数据传送到档案或是其它装置;数学:执行基本的数学运算,如加法和乘法;条

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2