logo资料库

Think Python 中英文对照教材 全本.pdf

第1页 / 共2884页
第2页 / 共2884页
第3页 / 共2884页
第4页 / 共2884页
第5页 / 共2884页
第6页 / 共2884页
第7页 / 共2884页
第8页 / 共2884页
资料共2884页,剩余部分请下载后查看
thinkpython-20130918
thinkpython-20130920
thinkpython-20130922
thinkpython-20130928
thinkpython-20131004
thinkpython-20131005
thinkpython-20131008
thinkpython-20131014
thinkpython-20131018
Think Python How to Think Like a Computer Scientist 如何像计算机科学家一样思考 Version 2.0.5 December 2012
Think Python How to Think Like a Computer Scientist Version 2.0.5 December 2012 Allen Downey Green Tea Press Needham, Massachusetts
Copyright © 2012 Allen Downey. Green Tea Press 9 Washburn Ave Needham MA 02492 Permission is granted to copy, distribute, and/or modify this document under the terms of the Creative Commons Attribution-NonCommercial 3.0 Unported License, which is available at http: //creativecommons.org/licenses/by-nc/3.0/. The original form of this book is LATEX source code. Compiling this LATEX source has the effect of gen- erating a device-independent representation of a textbook, which can be converted to other formats and printed. The LATEX source for this book is available from http://www.thinkpython.com
Preface 前前前言言言 The strange history of this book 本本本书书书与与与众众众不不不同同同的的的历历历史史史 In January 1999 I was preparing to teach an introductory programming class in Java. I had taught it three times and I was getting frustrated. The failure rate in the class was too high and, even for students who succeeded, the overall level of achievement was too low. 1999年1月,我正准备使用Java教一门编程入门课程。 我之前已经教了三次,并且感到很沮 丧。 课程的不及格率太高,即使对于及格的学生,整体的收获也太低。 One of the problems I saw was the books. They were too big, with too much unnecessary detail about Java, and not enough high-level guidance about how to program. And they all suffered from the trap door effect: they would start out easy, proceed gradually, and then somewhere around Chapter 5 the bottom would fall out. The students would get too much new material, too fast, and I would spend the rest of the semester picking up the pieces. 我看到的问题之一是教材。 它们都太大了,有太多不必要的关于Java的细节, 并且缺乏关 于如何编程的上层的指导。 同时,它们也缺乏陷阱门效应(trap door effect),即从简单 之处开始,并逐渐深入。 因此,大概到第五章左右,后面的学生开始掉队了。 学生们获得 太多的材料,进展太快,并且我在剩下的学期选择一些片段。 Two weeks before the first day of classes, I decided to write my own book. My goals were: 在开始上课前两周,我决定写一本自己的书。 我的目标是: • Keep it short. It is better for students to read 10 pages than not read 50 pages. 尽量简短。对于学生,读10页比读50页好。 • Be careful with vocabulary. I tried to minimize the jargon and define each term at first use. 关注术语表。我试图使用最少的术语并且在第一次使用的时候给出定义。 • Build gradually. To avoid trap doors, I took the most difficult topics and split them into a series of small steps. 循序渐进。为了避免陷阱门,我将最难的主题拆分成一系列小的步骤。 • Focus on programming, not the programming language. I included the minimum useful subset of Java and left out the rest. 聚焦于编程,而不是编程语言。我只包括了Java最小的有用的子集, 并且忽略其余 的。
vi Chapter 0. Preface 前前前言言言 I needed a title, so on a whim I chose How to Think Like a Computer Scientist. 我需要一个标题,所以一时兴起,我选择了《如何像计算机科学家一样思考》。 My first version was rough, but it worked. Students did the reading, and they understood enough that I could spend class time on the hard topics, the interesting topics and (most important) letting the students practice. 第一版很粗糙,但是它有效。学生们读它,并且他们足够理解它。 然后我可以将上课时间 花在那些难的、有趣的主题上, 并且让学生们实践(这点最重要)。 I released the book under the GNU Free Documentation License, which allows users to copy, modify, and distribute the book. 我将此书以GNU免费文档许可的形式发布, 该许可允许用户拷贝、修改并且发布此书。 What happened next is the cool part. Jeff Elkner, a high school teacher in Virginia, adopted my book and translated it into Python. He sent me a copy of his translation, and I had the unusual experience of learning Python by reading my own book. As Green Tea Press, I published the first Python version in 2001. 接下来发生的非常棒。 弗吉尼亚一所高中的教师,Jeff Elkne修改了我的书并且翻译成 了Python。 他将他的翻译发给了我一份,我有了一个与众不同的学习Python的体验, 即 通过读我自己的书。 2001年,通过绿茶出版社(Green Tea Press),我发表了本书的第一 个Python版本。 In 2003 I started teaching at Olin College and I got to teach Python for the first time. The contrast with Java was striking. Students struggled less, learned more, worked on more interesting projects, and generally had a lot more fun. 2003年,我开始在Olin College教书,并且第一次教Python。 与教Java的对比很显著,学 生需要付出的努力更少,学到的更多, 他们致力于更有趣的项目,并且通常更快乐。 Over the last nine years I continued to develop the book, correcting errors, improving some of the examples and adding material, especially exercises. 过去9年我一直在改进这本书,纠正一些错误,改进一些实例, 增加一些材料,特别是练习 题。 The result is this book, now with the less grandiose title Think Python. Some of the changes are: 本书的结果是,现在有了一个更具体的名字《Think Python》。 下面是一些变化: • I added a section about debugging at the end of each chapter. These sections present general techniques for finding and avoiding bugs, and warnings about Python pit- falls. 每章最后,我都增加了一节关于调试(debugging)的内容。 这些小节给出关于发现 和避免一些错误的通常的技术, 以及关于Python的陷阱。 • I added more exercises, ranging from short tests of understanding to a few substantial projects. And I wrote solutions for most of them. 增加了更多的练习题,涵盖了从为了理解的简短的测试到真正的项目。 并且为其中大 部分写了答案。
vii • I added a series of case studies—longer examples with exercises, solutions, and discussion. Some are based on Swampy, a suite of Python programs I wrote for use in my classes. Swampy, code examples, and some solutions are available from http://thinkpython.com. 我增加了一系列范例分析(case studies), 即具有联系、答案以及讨论的更长的样 例。 其中一些基于Swampy,我写的一套用于我的课程的Pythong程序。 Swampy、 代码样例、以及一些答案可以从 http://thinkpython.com 获得。 • I expanded the discussion of program development plans and basic design patterns. 我扩展了关于程序开发规划和基本设计模式的讨论。 • I added appendices about debugging, analysis of algorithms, and UML diagrams with Lumpy. 我增加了关于调试、算法分析以及使用Lumpy画UML图的附录。 I hope you enjoy working with this book, and that it helps you learn to program and think, at least a little bit, like a computer scientist. 我希望你能使用该书愉快的工作,并且它能帮助你学习编程和思考, 至少或多或少像一个 计算机科学家。 Allen B. Downey Needham MA Allen Downey is a Professor of Computer Science at the Franklin W. Olin College of Engi- neering. Allen Downey是Franklin W. Olin工学院一名计算机科学教授。 Acknowledgments Many thanks to Jeff Elkner, who translated my Java book into Python, which got this project started and introduced me to what has turned out to be my favorite language. Thanks also to Chris Meyers, who contributed several sections to How to Think Like a Com- puter Scientist. Thanks to the Free Software Foundation for developing the GNU Free Documentation Li- cense, which helped make my collaboration with Jeff and Chris possible, and Creative Commons for the license I am using now. Thanks to the editors at Lulu who worked on How to Think Like a Computer Scientist. Thanks to all the students who worked with earlier versions of this book and all the con- tributors (listed below) who sent in corrections and suggestions. Contributor List More than 100 sharp-eyed and thoughtful readers have sent in suggestions and corrections over the past few years. Their contributions, and enthusiasm for this project, have been a huge help.
viii Chapter 0. Preface 前前前言言言 If you have a suggestion or correction, please send email to feedback@thinkpython.com. If I make a change based on your feedback, I will add you to the contributor list (unless you ask to be omitted). If you include at least part of the sentence the error appears in, that makes it easy for me to search. Page and section numbers are fine, too, but not quite as easy to work with. Thanks! • Lloyd Hugh Allen sent in a correction to Section 8.4. • Yvon Boulianne sent in a correction of a semantic error in Chapter 5. • Fred Bremmer submitted a correction in Section 2.1. • Jonah Cohen wrote the Perl scripts to convert the LaTeX source for this book into beautiful HTML. • Michael Conlon sent in a grammar correction in Chapter 2 and an improvement in style in Chapter 1, and he initiated discussion on the technical aspects of interpreters. • Benoit Girard sent in a correction to a humorous mistake in Section 5.6. • Courtney Gleason and Katherine Smith wrote horsebet.py, which was used as a case study in an earlier version of the book. Their program can now be found on the website. • Lee Harr submitted more corrections than we have room to list here, and indeed he should be listed as one of the principal editors of the text. • James Kaylin is a student using the text. He has submitted numerous corrections. • David Kershaw fixed the broken catTwice function in Section 3.10. • Eddie Lam has sent in numerous corrections to Chapters 1, 2, and 3. He also fixed the Makefile so that it creates an index the first time it is run and helped us set up a versioning scheme. • Man-Yong Lee sent in a correction to the example code in Section 2.4. • David Mayo pointed out that the word “unconsciously" in Chapter 1 needed to be changed to “subconsciously". • Chris McAloon sent in several corrections to Sections 3.9 and 3.10. • Matthew J. Moelter has been a long-time contributor who sent in numerous corrections and suggestions to the book. • Simon Dicon Montford reported a missing function definition and several typos in Chapter 3. He also found errors in the increment function in Chapter 13. • John Ouzts corrected the definition of “return value" in Chapter 3. • Kevin Parks sent in valuable comments and suggestions as to how to improve the distribution of the book. • David Pool sent in a typo in the glossary of Chapter 1, as well as kind words of encouragement. • Michael Schmitt sent in a correction to the chapter on files and exceptions. • Robin Shaw pointed out an error in Section 13.1, where the printTime function was used in an example without being defined. • Paul Sleigh found an error in Chapter 7 and a bug in Jonah Cohen’s Perl script that generates HTML from LaTeX.
分享到:
收藏