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

上传人:wj 文档编号:3430298 上传时间:2023-05-05 格式:PDF 页数:172 大小:712.34KB
下载 相关 举报
像计算机科学家一样思考python.pdf_第1页
第1页 / 共172页
像计算机科学家一样思考python.pdf_第2页
第2页 / 共172页
像计算机科学家一样思考python.pdf_第3页
第3页 / 共172页
像计算机科学家一样思考python.pdf_第4页
第4页 / 共172页
像计算机科学家一样思考python.pdf_第5页
第5页 / 共172页
像计算机科学家一样思考python.pdf_第6页
第6页 / 共172页
像计算机科学家一样思考python.pdf_第7页
第7页 / 共172页
像计算机科学家一样思考python.pdf_第8页
第8页 / 共172页
像计算机科学家一样思考python.pdf_第9页
第9页 / 共172页
像计算机科学家一样思考python.pdf_第10页
第10页 / 共172页
像计算机科学家一样思考python.pdf_第11页
第11页 / 共172页
像计算机科学家一样思考python.pdf_第12页
第12页 / 共172页
像计算机科学家一样思考python.pdf_第13页
第13页 / 共172页
像计算机科学家一样思考python.pdf_第14页
第14页 / 共172页
像计算机科学家一样思考python.pdf_第15页
第15页 / 共172页
像计算机科学家一样思考python.pdf_第16页
第16页 / 共172页
像计算机科学家一样思考python.pdf_第17页
第17页 / 共172页
像计算机科学家一样思考python.pdf_第18页
第18页 / 共172页
像计算机科学家一样思考python.pdf_第19页
第19页 / 共172页
像计算机科学家一样思考python.pdf_第20页
第20页 / 共172页
亲,该文档总共172页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

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

《像计算机科学家一样思考python.pdf》由会员分享,可在线阅读,更多相关《像计算机科学家一样思考python.pdf(172页珍藏版)》请在冰点文库上搜索。

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

-1-像计算机科学家那样思考像计算机科学家那样思考(中文版)(中文版)-2-目录贡献者名单.I前言.V序言.VII1程序之道.11.1Python程序语言.11.2程序是什么?

.31.3除虫是什么?

.31.4语法错误(Syntaxerrors).41.5执行错误(Runtimeerrors).41.6语意错误(Semanticerrors).41.7实验性除虫.41.8形式语言及自然语言.51.9第一个程序.71.10术语.71.11练习.92变数、表达式及陈述.112.1数值与型态.112.2变数.122.3变量名称与关键词.132.4陈述.142.5表达式求值.142.6运算子与操作数.152.7运算的次序.162.8字符串的运算.162.9输入.172.10组合.172.11批注.182.12术语.182.13练习.203函数.223.1函数定义及用法.223.2执行流程.243.3参数、自变量以及import陈述.243.4组合.263.5区域的概念:

变数及参数.263.6堆栈图.273.7术语.283.8练习.304条件式.324.1余数运算子.324.2布尔值与表达式.324.3逻辑运算子.334.4条件执行.33-3-4.5替代执行.344.6炼状条件式.354.7巢状条件式.354.8return陈述.364.9键盘输入.364.10型态转换.374.11Gasp.394.12术语.404.13练习.415多效函数.465.1传回值.465.2程序开发.475.3函数的组合.495.4布尔函数.505.5函数(function)型态.505.6有型的程序设计.515.7三引号字符串.525.8用doctest做单元测试.525.9术语.545.10练习.556重复.606.1多重指派.606.2更新变数.606.3while陈述.616.4追踪一个程序.626.5计算数字.636.6缩写指派.646.7表格.656.8二维表格.666.9封装与一般化.666.10更多的封装.676.11区域变量.686.12更多的一般化.686.13函数.706.14牛顿勘根法.706.15算法.706.16术语.716.17练习.727对照上面的doctests检查你的答案。

7.字符串.7577.字符串.767.1复合数据型态.767.2长度.767.3走访以及for循环.777.4字符串切片.787.5字符串比较.797.6字符串是不可变的.79-4-7.7in运算子.797.8Afind函数.807.9循环及参数.817.10选择性参数.817.11string模块.827.12字符的分类.837.13字符串格式化.847.14索引.867.15练习.878案例研究:

Catch.918.1起步.918.2用while移动球.918.3程度的调整.928.4使球弹回.938.5break陈述.938.6响应键盘.948.7检查碰撞.958.8组合这些片段.968.9显示文字.978.10抽象化.988.11术语.1018.12练习.1028.13专题:

pong.py.1029Tuple.1049.1可变性与tuple.1049.2Tuple指派.1059.3Tuple做为传回值.1069.4随机数字.1069.5随机数字列表.1079.6计算.1089.7许多分区.1099.8一个单程的解决方法.1119.9术语.11210缺少.11411档案和例外.11511.1文字文件.11711.2写入变数.11911.3目录.12111.4腌制.12211.5例外.12311.6术语.12612类别与对象.12812.1使用者设定的复合型态.12812.2属性.12912.3以实例作为自变量.13012.4相同性.130-5-12.5矩形.13212.6以实例作为传回值.13312.7物件是可变的.13312.8复制.13412.9术语.13613类别与函数.13713.1Time类别.13713.2纯函数.13713.3修饰子.13913.4哪一个比较好?

.14113.5原型开发V.S.计划.14113.6一般化.14213.7算法.14313.8术语.14314类别与方法.14514.1对象导向功能.14514.2printTime.14514.3另一个范例.14714.4一个更为复杂的范例.14814.5选择性自变量.14914.6初始化方法.15014.7重新审视Points.15214.8运算子多载.15314.9多形(Polymorphism).15414.10术语.156-I-贡献者名单为阐述自由软件基金会的哲学,这本书是自由的,就像自由言论(freespeech)一样,不过不一定像免费披萨(freepizza)一样免费。

本书经由合作产生,如果没有GNUFreeDocumentationLicense,这种类型的合作就不可能发生。

所以我们想要感谢自由软件基金会发展这个授权,而且让我们得以取用。

我们同时也想感谢一百多个眼睛锐利而且体贴的读者,他们在过去数年间传送给我们建议和修正。

依照自由软件的精神,我们决定用贡献者名单的形式表示我们的感谢。

可惜的是,这份名单并不完整,但我们会尽最大努力使其包含最新讯息。

如果要包含所有仅传送一两个错误的人员,这份名单会变得过于庞大。

你除了有我们的感谢,还得到了个人满足感,因为对你和所有使用本书的人来说,你让这本对你有用的书更完善了。

第二版名单新增的部分是那些目前仍做出贡献的人。

如果你有机会检视这份名单的话,你应该明暸这里的每个人仅借着通知我们,就让你和后面的读者不会因技术上的错误,或不甚清楚明白的解释而疑惑。

虽然经过这么多次修正后,似乎不太可能再出错,不过本书中可能仍有些错误。

如果你看到其中一个,我们希望你能花点时间联络我们。

电子邮件地址是:

如果因你的建议而做出实质改变,你将会被加入下一版本的贡献者名单中(除非你要求略去姓名)。

谢谢你!

0.1.1第二版第二版?

特别感谢Jeff2007-2008学年HB-Woodlawn课程中计算机科学班级的学生:

JamesCrowley、JoshuaEddy、EricLarson、BrianMcGrail和IlianaVazuka。

你们愿意作为新章节写好时的beta测试者,并忍受随着你们的响应而经常进行的修订,在在都证明是无价的。

也由于你们,这本书有真正由学生测试过的文字。

?

AmmarNabulsi送来了关于第一章和二章为数众多的修正。

?

AldricGiacomoni指出了第五章我们关于斐波纳契数列的一个错误。

?

RogerSperberg送来数个拼字修正,并指出第三章中一个逻辑混乱的段落。

-II-?

AdeleGoldberg在PyCon2007和Jeff坐下来谈了一会,并给了他一份关于整本书的建议和修正清单。

?

BenBruno送来关于第四、五、六和第七章的修正。

?

CarlLaCombe指出我们在第六章错用了commutative这个词,其实symmetric才是正确的词。

?

AlessandroMontanile送来在第三、十二、十五、十七、十八、十九和二十章中,程序范例和文字错误的修正。

?

EmanueleRusconi在第四、八和十五章找到错误。

?

MichaelVogt回报第六章中一个范例的缩排错误,并送来第一章关于shellvs.script一节的建议,以改善理解度。

0.1.2第一版第一版?

LloydHughAllen送来8.4节的一个修正。

?

YvonBoulianne送来第五章中一个语义错误的修正。

?

FredBremmer提交了一个2.1节的修正。

?

JonahCohen写了一个Perl脚本,将本书的LaTeX原始档转换成美丽的HTML码。

?

MichaelConlon送来第二章中一个文法修正,并改善第一章中的写作风格,另外他也发起了关于编译器技术观点的讨论。

?

BenoitGirard送来对于5.6节一个可笑错误的修正。

?

CourtneyGleason和KatherineSmith写了horsebet.py,它被用来当成本书早期版本中的实例探讨。

他们的程序现在可以在网站上找到。

?

LeeHarr所提交的错误多到我们这里的空间不足以一一列出,他其实应该被列为本文主要编辑之一。

?

JamesKaylin是个使用本文的学生。

他提交了许多修正。

?

DavidKershaw修好了3.10节中坏掉的catTwice函数。

?

EddieLam送来了许多关于第一、二和第三章的修正。

他同时也修好了Makefile,让它可以在第一次执行时,建立一个索引,并且帮助我们设定了版本管理系统。

?

Man-YongLee送来2.4节中范例程序代码的一个修正。

?

DavidMayo指出第一章中unconsciously这个字应该更正为subconsciously。

-III-?

ChrisMcAloon送来3.9和3.10节中的数个修正。

?

MatthewJ.Moelter是个长期贡献者,他送来对本书为数众多的修正和建议。

?

SimonDiconMontford回报了第三章中遗漏的函数定义和数个拼字错误。

他同时也找到了第十三章中increment函数中的错误。

?

JohnOuzts修正了第三章中returnvalue的定义。

?

KevinParks送来关于如何推广本书的评论和建议。

?

DavidPool送来第一章术语中的一个拼字错误,同时也用他亲切的文字鼓励我们。

?

MichaelSchmitt送来关于档案和例外章节的一个修正。

?

RobinShaw指出13.1节的一个错误,printTime函数被使用在范例中,却没有定义。

?

PaulSleigh发现了一个第七章中的错误,并且在JonahCohen从LaTeX生成HTML的Perl脚本中找到一个臭虫。

?

CraigT.Snydal在德鲁大学中的一个课程中测试本文。

他贡献了数个珍贵的建议和修正。

?

IanThomas和他的学生在一堂程序设计课程中使用本文。

他们是首批测试本书后半章节的人员,而且他们做出了为数众多的修正和建议。

?

KeithVerheyden送来一个关于第三章的修正。

?

PeterWinstanley让我们知道第三章中的拉丁文里一直存在的错误。

?

ChrisWrobel修改了档案I/O和例外章节中的程序代码。

?

MosheZadka对这个计划做出了无法估计的贡献。

除了撰写Dictionaries章节的初稿外,他还在本书的早期阶段提供了不间断的指导。

?

ChristophZwerschke送来数个修正和教学法上的建议,并解释了gleich和selbe之间的不同。

?

JamesMayer送来许多拼字和排版错误,包含贡献者名单中的两个。

?

HaydenMcAfee在两个范例间抓到了一个有可能导致迷惑的不一致之处。

?

AngelArnal是国际翻译团队的一员,致力于本书的西班牙文版本。

他也同时找到了英文版中的数个错误。

?

TauhidulHoque和LexBerezhny绘制了第一章插图,并改善了许多其它的插图。

?

Dr.MicheleAlzetta在第八章抓出一个错误,并送来一些关于斐波那契与老处女(OldMaid)的有趣教学法评论和建议。

?

AndyMitchell找出第一章中的一个拼字错误和第二章中失效的范例。

?

KalinHarvey对于第七章提出了增进理解度的建议,并抓出一些拼字错误。

-IV-?

ChristopherP.Smith抓出了数个拼字错误,并帮忙我们准备升级本书到Python2.2版。

?

DavidHutchins在前言中找出一个拼字错误。

?

GregorLingl在奥地利维也纳的高中里教授Python。

他正进行本书的德文翻译,他在第五章中抓出一些不良的错误。

?

JuliePeters在序言中抓出一个拼字错误。

0.1.3正体中文版正体中文版?

正体中文版由自由软件铸造场同仁于2008年开始翻译,中文书名译为如何像计算机科学家一样思考,其中:

?

张凯庆翻译本书正体中文版第一到八章。

?

徐孟逵校订本书正体中文版第一到八章,并翻译第九到十四章。

-V-前言DavidBeazley著作为教育家、研究者及书籍作者,我很高兴看到这本书的完成。

Python是个有趣并且非常易用的程序语言,在过去几年里,Python逐渐地受到欢迎。

GuidovanRossum在十多年前开发了Python,其简单的语法与整体感觉则是得自于ABC,这个1980年代发展的教学语言。

然而,Python也被设计成可以解决真实的问题,并且也从其它程序语言如C+、Java、Modula-3和Scheme等,借用了各式各样的特征。

正因如此,Python最显而易见的特色之一就是它广泛吸引了专业软件开发者、科学工作者、研究者、艺术家及教育家。

虽然Python吸引了不同社群的人士,你可能还是会怀疑为何选用Python?

,或者为甚么教导用Python撰写程序?

回答这些问题可不简单-特别是当大众的意见都站在,如C+和Java这些自讨苦吃的选择这一边的时候。

然而,我想最直接的答案就是用Python写程序可以单纯地得到许多乐趣,并且更有生产力。

当我教授计算机科学课程时,我希望教学题材涵盖重要概念,又能对学生来说有趣且迷人。

可惜的是,程序设计入门课程目前倾向投注过多焦点在数学抽象概念上,且让学生因恼人问题而沮丧,如语法、编译以及看起来晦涩难解的规则等低阶细节。

尽管这些抽象及形式对专业软件工程师和计划继续学习计算机科学的学生来说,非常重要,在一个入门性的课程采取这种方式大部分只会使计算机科学更无趣。

教课的时候,我可不想面对一整间无精打采的学生。

我宁愿看到他们透过探索不同的想法、采取有创意的方式、打破成规并从错误中学习,以尝试解决有趣的问题。

这么做的原因是,我不想浪费半个学期试着厘清含糊的语法问题、难以理解的编译器错误讯息,或是一个程序可能造成一般性保护错误的数百种方式。

我喜欢Python的原因之一,就是它在实做与概念上取得了很好的平衡。

既然Python是直译的,初学者几乎可以立刻学会这个语言,并做些美妙的事,而不会迷失在编译与连结的问题中。

更有甚者,Python随附大型的模块库,能够应用在各种工作上,包括网络程序设计到图形处理等。

具有如此实用的重点是吸引学生注意力的绝佳方式,并且能让他们完成重要的项目。

然而,Python也可以作为介绍重要计算机科学概念的优良基础。

由于Python完整支持程序和类别,便可逐步引导学生认识程序抽象化、数据结构,以及对象导向程序设计等课题,这些全都可以应用在往后Java或C+的课程上。

Python还向函数型程序语言借了许多功能,可以用来介绍这些以往是在Scheme及Lisp的课堂上详细介绍的概念。

-VI-读了Jeffrey的序文,我被他的评论所感动,Python使他看见更高层次的成就以及较低层次的挫折,而他可以工作得更快且获得较佳结果。

尽管这些评论是指他的入门课程,我有时会以同样的理由,将Python应用在芝加哥大学的进阶研究所计算机科学课程。

在这些课程里,我不断地面对将大量困难的课程资料,包含在极短的九星期学季中这种让人气馁的工作。

虽然我必定可以承受使用像C+这种语言所带来的大量痛苦及折磨,我常常发现这种方式有着不良的后果,特别是这些课程的主题不只是关于程序设计时。

我发现使用Python让我能够较为集中在实际的主题上,同时也使学生能够完成重要的课程作业。

虽然Python仍是年轻、发展中的语言,我相信它在教育上会有耀眼的未来。

这本书在这方向上是重要的一步。

DavidBeazley,芝加哥大学,PythonEssentialReference作者-VII-序言ByJeffreyElkner本书的存在归功于网络及自由软件运动所实现的合作方式。

它的三位作者-一位大学教授、一位高中老师,以及一位专业程序设计师-尚未见过面,但是我们已经能够紧密合作,并且受到许多愿意付出时间与心力的杰出人士帮助,使得这本书更臻完善。

我们认为本书证明了此种合作方式的优点以及未来的可能性,而这样的合作架构已经由RichardStallman和自由软件基金会运作多年。

我如何及为甚么使用我如何及为甚么使用Python1999年,大学委员会的先修大学计算机科学课程(AdvancedPlacementComputerScience)考试,第一次用C+。

和全国各地的许多高中一样,维吉尼亚州阿灵顿郡约克敦高中的计算机科学课程也直接受到变更语言的决定影响,我就在此所高中任教。

在此之前,Pascal是我们一年级及先修课程的教学语言。

为了和过去让学生有两年的时间接触相同语言的作法一样,我们决定在1997到1998学年的一年级课程改用C+教学,如此我们便能衔接大学委员会对下年度先修计算机科学课程的改变。

两年后,我确信使用C+为学生介绍计算机科学,不是个适当的选择。

虽然它的确是个非常强大的程序语言,但它也是个极度难以学习与教导的语言。

我发现我自己不断地对抗C+困难的语法以及处理相同事务的多重方式,结果让我无谓地失去了许多学生。

我确信一定会有更适合一年级课程的语言,于是开始寻找一个可以替代C+的选择。

我需要一个能够运作在我们GNU/Linux实验室语言,但同时也要能够运作在大部分学生家里的Windows及Macintosh平台。

我希望它是个自由软件,好让学生不管收入多少,都能够在家使用。

我想要一个专业程序设计师使用的语言,并且有个活跃的开发社群。

它必须同时支持程序式及对象导向程序设计。

最重要的是,它必须容易学习和教授。

当我以这些条件研究过许多选择后,Python脱颖而出成为此项工作的最佳候选人。

我请一位聪明的约克敦高中学生,MattAhrens,尝试使用Python。

他不但在两个月内学会这个语言,而且写了一个叫做pyTicket的应用程序,让我们的人员可以透过网络回报技术-VIII-问题。

我知道Matt无法在这么短的时间用C+完成如此规模的应用程序,这项成就和Matt对Python的正面评价,显示Python是我所寻找的解决方案。

寻找教科书寻找教科书我决定在下年度的两个计算机科学概论课程都使用Python后,最迫切的问题是缺少一本可用的教科书。

自由文件解决了这个问题。

RichardStallman在今年稍早向我介绍了AllenDowney这个人。

我们两个都写信向Richard表达发展自由教育资料的兴趣。

Allen已经写了本一年级计算机科学的教科书,如何像计算机科学家一样思考。

当我读了这本书,我立即知道我想将它应用在我的课程中。

它是我见过最清楚且最有帮助的计算机科学教科书。

它突显出在写程序时的思考过程,而非特定语言的功能。

阅读它使我马上变成了更好的老师。

如何像计算机科学家一样思考不只是一本出色的书,并且它是以GNU公众授权发布,这就是说它可以自由使用,并可依使用者需要修改。

一旦我决定使用Python后,我想到我可以转换Allen这本书的原始Java版本到新的语言。

也许我本来无法自己撰写一本教科书,但从Allen的书改写使我可以达成这个工作,这同时也证明了在软件上运作良好的协力发展模式,也可以使用在教学资料上。

过去两年来编写这本书对学生及我都受益匪浅,而我的学生在此过程中扮演了一个重要的角色。

既然我够在有人发现拼写错误或是阅读困难的章节时立即修正,因此我在课文因他们的建议而修正时,为他们加分,以鼓励他们寻找本书的错误。

这么做有着双重的好处,一是鼓励他们更加小心地阅读课文,另一个好处则是让课文由它最重要的评论者-使用它学习计算机科学的学生-澈底审查。

针对本书后半部关于对象导向程序设计的部分,我知道我需要一个比我更有实际程设经验的人来使它更为正确。

本书在大部分时间处于未完成的状态,直到开放源码社群再次提供完成它所需要的工具。

我收到一封ChrisMeyers寄来的电子邮件,表达他对本书的兴趣。

Chris是一位专业程序设计师,他去年在奥勒岗州尤金市的Lane小区大学开始使用Python教授程序设计课程。

教授这门课程让Chris找到这本书,而且他立即开始帮忙本书的编撰。

在学年结束前,他在我们的网站http:

/设置了一个指南手册计划,叫做PythonforFun,他并担任指导教师,与我最顶尖的学生一起合作,带领他们进入超出我能力之外的领域。

-IX-用用Python介绍程序设计介绍程序设计过去的两年里,转换及使用如何像计算机科学家一样思考的过程已经证实Python适于教导初学的学生。

Python极其简化程序设计范例,并且让重要的程序设计观念较容易教授。

课文中的第一个范例说明了这一点。

传统的Hello,world程序,在本书的C+版本看来如下:

#includevoidmain()coutHello,world.print1+12这个例子的第一行,是在Unix命令提示符下启动Python直译器的命令。

下三行是直译器提供的讯息。

第四行以起始,这是Python提示符。

直译器使用这个指示符表示它已准备好接受指示。

我们输入print1+1,直译器回应结果为2。

另外,你也可以将程序写入一个档案中,然后利用直译器执行档案内容。

这样的档案就叫做脚本脚本。

例如,我们使用文字编辑器建立一个名为firstprogram.py档案,并包含下列内容:

print1+1传统上,包含Python程序的档案有着以.py结尾的名称。

要执行这个程序,我们必须要告诉直译器脚本的名称:

$pythonfirstprogram.py2这些例子说明Python运作在Unix命令列的情形。

在其它程序开发环境中,程序执行的细节可能会不一样。

另外,大多数的程序比这个例子有趣许多。

-3-本书范例同时使用Python直译器和脚本。

你将可以分辨该使用哪一种方式,因为shell模式范例永远以Python提示符起始。

在shell模式中工作可以方便测试简短的程序代码,因为你可以获得立即回馈。

请将它想成用来帮你找出问题答案的便条纸。

任何长于数行的程序都应该放到脚本中。

1.2程序是什么?

程序是什么?

程序程序是一连串具体说明如何计算的指令。

这种计算可能是数学的,像是找到方程组的解或是多项式的根,也可能是一种象征性的计算,就像在文件中搜寻并取代文字,或(说来也奇怪)编译一个程序。

不同程序语言的详细情况看起来都不一样,但有一些基本的指令,几乎在每种程序语言中都可以发现:

输入:

从键盘、档案或是其它装置取得数据;输出:

在屏幕上显示数据,或着是将数据传送到档案或是其它装置;数学:

执行基本的数学运算,如加法和乘法;条

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 求职职场 > 简历

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

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