# Think Python

第二版,基于Python3

原作者 Allen B. Downey

翻译 CycleUser

在线阅读地址

PDF格式的电子版

# 译者的话

这是一本很经典的Python入门教材,也是一本很适合初学者的编程入门书籍。网上有过一些翻译,不过我觉得都还是自己动手来尝试一下,这样更有利于深入了解和体验,所以就再造轮子了。

# 作者的话

这是Think Python这本书的第二版,本次使用的是Python3,与Python2有很多不同,这些不同之处会有标注。如果你用Python2的话,还是建议你去阅读上一个版本

读者可以到亚马逊购买本书;或者下载 Think Python 2e PDF格式的电子版.;也可以在线阅读 Think Python 2e HTML网页版本(推荐这个,都是文字格式,更方便).

样例代码以及其他问题的解决可以到这里找(具体样例的链接在书中就有)。

# 简要介绍

Think Python 这本书是面向初学者介绍Python编程。

首先介绍的是一些编程的基本内容,给出概念和解释,然后循序渐进地深入讲解每个概念。

复杂的部分,比如递归以及面向对象编程,这些都分成一个个小块,以多个章节的方式来逐步介绍。

# 第二版的更新

  • 开始用Python3:书里面所有样例都用Python3来实现,参考代码也都做了升级,用Python2或者3都能运行。

  • 去掉了一些比较难的内容:基于读者反馈,我们认识到大家存在某些困难,所以就调整或者去掉了一些难点。

  • 浏览器内能Python编程了:初学者遇到的第一个困难就是安装Python。另外有的读者可能不想去直接就安装Python,我们就提供了一个用浏览器来运行Python的简介:使用PythonAnywhere,一个免费的在线Python编程环境。(译者注:中国用户以考虑试试fenby.com,也有类似的实现,还有视频的介绍。)

  • 引入了更多的Python特性:单独加了一章来介绍一些第一版中没有提及的Python功能,比如列表解析和附加的数据结构。

这本书是一本自由的书,遵循创作共用署名-非商业性使用-第三版协议,这意味着你可以自由地复制、分发和修改他,只要你有所贡献,并且不用于商业目的,就可以。

如果你有一些评论、修正或者建议,可以发邮件给feedback@thinkpython.com。

其他由 Allen Downey 编写的自-和谐-由书籍都可以在Green Tea Press找到.

# 英文原版下载

# 过往历史

第一版在这里,是由剑桥大学出版社出版的,标题是 Python for Software Design. 可以到亚马逊去买到。 本书的原始版本由Green Tea Press 出版,标题为 How to Think Like a Computer Scientist: Learning with Python. 这个版本可以从Lulu.com这个网站找到。其他由 Allen Downey 编写的自由书籍都可以在Green Tea Press找到.

# 前言

# 本书的奇幻历史

在1999年1月的时候呢,我正准备教一门Java的入门编程课。我当时已经教过三次了,受挫感很强。班上挂科率特别高,而且即使那些没挂科的学生编程的整体水平也特别低。

当时有很多问题,首先我就发现教材不太好用。那些教材都特别大部头,有很多关于Java的细节,特别琐碎又并不重要,而且也没有足够的关于如何编程的高层次指导(译者注:就是缺乏战略性指导,没有告诉学生编程的心法)。这些教材总有一些『陷阱门效应』:开头他们都却是挺简单,然后逐步提升,接着突然在某个地方,比如第五章,出现很坑很复杂的陷阱。学生们要突然一下子应对太多新东西,甚至措手不及,而我作为教师就得花费整个后半个学期来一点点给学生们补上。

开课的两周之前,我最终决定要写个自己的教科书。目标如下:

  • 简短。让学生读10页就够比让他们读50页效果好得多。

  • 降低词汇难度。我尽量把术语用量降到最低,并且在首次使用的时候对每一个都进行定义。

  • 循序渐进。为了避免『陷阱门效应』,我专门把这些最为复杂的部分抽离成一个个专题,并且都切分成小规模的部分,一步步来进行。

  • 专注于编程,而不是编程语言。我只保留了关于Java的最小规模内容,没有涉及更多的细节。

我还需要个标题,就突发奇想,选了个标题叫做『如何像计算机科学家一样思考』。

我的第一版教材很粗糙,不过用起来效果还不错。学生真能看得进去,并且理解了我在课上所讲的那些难点和有趣的专题,最重要的是,他们能够根据这本教材来实践。

之后我就以GNU自由文档协议来发布了这本书,这一协议允许所有人去复制、修改以及分发这本书。

接下来的事情很有趣了。Jeff Elkner,维吉尼亚的一位高中教师,他很欣赏我这本书,把这本书从Java翻译成了Python的版本。他发给我一份『译稿』,然后我开启了阅读『自己的书』来学习Python的奇妙经历。于是在2001年,我通过Green Tea Press出版了本书的第一个Python版本。

在2003年,我开始在奥林商学院教学,并且第一次开始教Python了。这和Java的对比很鲜明。学生们省力多了,学得也更多了,在有趣的项目上也更努力,整体上都觉得这一学习过程很有乐趣。从那以后,我就继续维护这本书,修正错误,改进样例、附加资料以及练习题。

结果就产生了现在这本书,现在标题简化了很多——Think Python。

主要的改变如下:

  • 在每一章的末尾,我加了关于debug的部分。这些内容提供了关于debug的一些整体策略,比如如何找到和避免bug,还有就是关于Python一些陷阱进行了提醒。

  • 我加了更多的练习,从简单的理解方面的测试,到一些比较充足的项目。大多数练习都有解决方案的样本链接。

  • 我还添加了一些案例研究,包含练习、解决方案和讨论的更大规模的样例。

  • 此外我还扩展了关于程序开发规划和基本设计模式的讨论。

  • 关于debug和算法分析,还额外加了一些附录。

这本Think Python 的第二版有如下的新内容:

  • 本书内的所有参考代码都升级到Python3了。

  • 我增加了一部分内容,以及一些关于web方面的细节,这是为了帮助初学者能够在浏览器中开始尝试Python,这样即便你不想安装Python也没问题了。

  • 在第四章的第一节,我把我自己的一个原来叫做Swampy的小乌龟图形包转换撑了一个更标准的Python模块,名字叫做turtle,更好安装,功能也比之前强大了。

  • 我还添加了新的一章,叫做『彩蛋』,介绍了一些Python的额外功能,严格来说,这些功能并不算必备的,但有时候蛮好用的。

我希望大家能享受学习这本书的过程,也希望这本书能帮助大家学习编程,并且让大家学会像计算机科学家一样思考,哪怕有一点点也好。

本书英文版原作者:Allen B. Downey(艾伦 唐尼)

            Olin College 奥林商学院

# 致谢

非常感谢Jeff Elkner,是他把我的Java教材翻译成了Python,才引起了这一项目的开始,并且也把Python语言介绍给我,它已经是我最喜欢的编程语言了。 也要感谢Chris Meyers,他对『如何像计算机科学家一样思考』的一些章节有贡献。 感谢自由软件基金会,是他们提出了GNU自由文档协议,在这一协议的帮助下,我和Jeff以及Chris的合作成为了可能,当然也要感谢我现在使用的知识共享协议。 感谢Lulu的编辑们,他们出版了『如何像计算机科学家一样思考』。 感谢O’Reilly公司的编辑们,他们出版了这本『Think Python』。

最后还要感谢所有曾对本书早期版本做出过贡献的同学们,以及其他参与改错和提出建议的朋友们(列表如下)。

# 贡献列表

有几百名读者,他们目光敏锐又思维迅捷,在过去的这些年里提供了各种建议,发现了各种错误。他们贡献和热情都是对本项目的巨大帮助。

如果大家有任何意见建议,请发邮件到feedback@thinkpython2.com联系我们。如果基于反馈做出了修改,我会将你添加到贡献列表(当然你不想被添加也可以的)。

希望你能至少把出错句子的一部分提供出来,这都让我更容易去搜索。页码和章节编号也可以,但不太容易找。多谢了!

(译者注:以下贡献列表省略不在此处提供,有兴趣的朋友可以去看英文原版。)