Chapter 0 Preface 第 0 章 前言
本页译自 Think Python 2e(Allen B. Downey)· Chapter 0 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.
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.
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.
- 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.
- 简短为上。让学生读 10 页,好过让他们读不下 50 页。
- 谨慎用词。我尽量压缩行话,并在首次出现时定义每个术语。
- 循序渐进。为避免活板门效应,我把最难的话题拆成一系列小步骤。
- 聚焦编程,而非编程语言。我只保留 Java 中最小的有用子集,其余一概舍弃。
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.
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.
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.
Over the last nine years I continued to develop the book, correcting errors, improving some of the examples and adding material, especially exercises.
The result is this book, now with the less grandiose title Think Python. Some of the changes are:
- 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 pitfalls.
- I added more exercises, ranging from short tests of understanding to a few substantial projects. And I wrote solutions for most of them.
- 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. - 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.
- 我在每章末尾增加了一节关于调试的内容。这些小节介绍寻找和避免 bug 的通用技巧,并警示 Python 的陷阱。
- 我增加了更多习题,从检验理解的小测试到几个像样的项目不等,并为其中大部分写了答案。
- 我增加了一系列案例研究——更长的示例,附带习题、解答和讨论。其中一些基于 Swampy,那是我为上课写的一套 Python 程序。Swampy、代码示例和部分解答可以从
http://thinkpython.com获取。 - 我扩充了关于编程开发方案和基本设计模式的讨论。
- 我增加了关于调试、算法分析,以及用 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 Engineering.
Needham MA
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 Computer Scientist.
Thanks to the Free Software Foundation for developing the GNU Free Documentation License, 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 contributors (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.
If you have a suggestion or correction, please send email to [email protected]. If I make a change based on your feedback, I will add you to the contributor list (unless you ask to be omitted).
[email protected]。如果我根据你的反馈做了修改,我会把你加入贡献者名单(除非你要求略去)。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
catTwicefunction 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
incrementfunction 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.
- Craig T. Snydal is testing the text in a course at Drew University. He has contributed several valuable suggestions and corrections.
- Ian Thomas and his students are using the text in a programming course. They are the first ones to test the chapters in the latter half of the book, and they have made numerous corrections and suggestions.
- Keith Verheyden sent in a correction in Chapter 3.
- Peter Winstanley let us know about a longstanding error in our Latin in Chapter 3.
- Chris Wrobel made corrections to the code in the chapter on file I/O and exceptions.
- Moshe Zadka has made invaluable contributions to this project. In addition to writing the first draft of the chapter on Dictionaries, he provided continual guidance in the early stages of the book.
- Christoph Zwerschke sent several corrections and pedagogic suggestions, and explained the difference between gleich and selbe.
- James Mayer sent us a whole slew of spelling and typographical errors, including two in the contributor list.
- Hayden McAfee caught a potentially confusing inconsistency between two examples.
- Angel Arnal is part of an international team of translators working on the Spanish version of the text. He has also found several errors in the English version.
- Tauhidul Hoque and Lex Berezhny created the illustrations in Chapter 1 and improved many of the other illustrations.
- Dr. Michele Alzetta caught an error in Chapter 8 and sent some interesting pedagogic comments and suggestions about Fibonacci and Old Maid.
- Andy Mitchell caught a typo in Chapter 1 and a broken example in Chapter 2.
- Kalin Harvey suggested a clarification in Chapter 7 and caught some typos.
- Christopher P. Smith caught several typos and helped us update the book for Python 2.2.
- David Hutchins caught a typo in the Foreword.
- Gregor Lingl is teaching Python at a high school in Vienna, Austria. He is working on a German translation of the book, and he caught a couple of bad errors in Chapter 5.
- Julie Peters caught a typo in the Preface.
- Florin Oprina sent in an improvement in
makeTime, a correction inmakeTime2, and a nice typo. - D. J. Webre suggested a clarification in Chapter 3.
- Ken found a fistful of errors in Chapters 8, 9 and 11.
- Ivo Wever caught a typo in Chapter 5 and suggested a clarification in Chapter 3.
- Curtis Yanko suggested a clarification in Chapter 2.
- Ben Logan sent in a number of typos and problems with translating the book into HTML.
- Jason Armstrong saw the missing word in Chapter 2.
- Louis Cordier noticed a spot in Chapter 16 where the code didn't match the text.
- Brian Cain suggested several clarifications in Chapters 2 and 3.
- Rob Black sent in a passel of corrections, including some changes for Python 2.2.
- Jean-Philippe Rey at Ecole Centrale Paris sent a number of patches, including some updates for Python 2.2 and other thoughtful improvements.
- Jason Mader at George Washington University made a number of useful suggestions and corrections.
- Jan Gundtofte-Bruun reminded us that "a error" is an error.
- Abel David and Alexis Dinno reminded us that the plural of "matrix" is "matrices", not "matrixes". This error was in the book for years, but two readers with the same initials reported it on the same day. Weird.
- Charles Thayer encouraged us to get rid of the semi-colons we had put at the ends of some statements and to clean up our use of "argument" and "parameter".
- Roger Sperberg pointed out a twisted piece of logic in Chapter 3.
- Sam Bull pointed out a confusing paragraph in Chapter 2.
- Andrew Cheung pointed out two instances of "use before def."
- C. Corey Capel spotted the missing word in the Third Theorem of Debugging and a typo in Chapter 4.
- Alessandra helped clear up some Turtle confusion.
- Wim Champagne found a brain-o in a dictionary example.
- Douglas Wright pointed out a problem with floor division in
arc. - Jared Spindor found some jetsam at the end of a sentence.
- Lin Peiheng sent a number of very helpful suggestions.
- Ray Hagtvedt sent in two errors and a not-quite-error.
- Torsten Hübsch pointed out an inconsistency in Swampy.
- Inga Petuhhov corrected an example in Chapter 14.
- Arne Babenhauserheide sent several helpful corrections.
- Mark E. Casida is is good at spotting repeated words.
- Scott Tyler filled in a that was missing. And then sent in a heap of corrections.
- Gordon Shephard sent in several corrections, all in separate emails.
- Andrew Turner
arc0ted an error in Chapter 8. - Adam Hobart fixed a problem with floor division in
arc. - Daryl Hammond and Sarah Zimmerman pointed out that I served up
arc0000 too early. And Zim spotted a typo. - George Sass found a bug in a Debugging section.
- Brian Bingham suggested Exercise 10.
- Leah Engelbert-Fenton pointed out that I used
arc00 as a variable name, contrary to my own advice. And then found a bunch of typos and a "use before def." - Joe Funke spotted a typo.
- Chao-chao Chen found an inconsistency in the Fibonacci example.
- Jeff Paine knows the difference between space and spam.
- Lubos Pintes sent in a typo.
- Gregg Lind and Abigail Heithoff suggested Exercise 4.
- Max Hailperin has sent in a number of corrections and suggestions. Max is one of the authors of the extraordinary Concrete Abstractions, which you might want to read when you are done with this book.
- Chotipat Pornavalai found an error in an error message.
- Stanislaw Antol sent a list of very helpful suggestions.
- Eric Pashman sent a number of corrections for Chapters 4–11.
- Miguel Azevedo found some typos.
- Jianhua Liu sent in a long list of corrections.
- Nick King found a missing word.
- Martin Zuther sent a long list of suggestions.
- Adam Zimmerman found an inconsistency in my instance of an "instance" and several other errors.
- Ratnakar Tiwari suggested a footnote explaining degenerate triangles.
- Anurag Goel suggested another solution for
makeTime8 and sent some additional corrections. And he knows how to spell Jane Austen. - Kelli Kratzer spotted one of the typos.
- Mark Griffiths pointed out a confusing example in Chapter 3.
- Roydan Ongie found an error in my Newton's method.
- Patryk Wolowiec helped me with a problem in the HTML version.
- Mark Chonofsky told me about a new keyword in Python 3.
- Russell Coleman helped me with my geometry.
- Wei Huang spotted several typographical errors.
- Karen Barber spotted the the oldest typo in the book.
- Nam Nguyen found a typo and pointed out that I used the Decorator pattern but didn't mention it by name.
- Stéphane Morin sent in several corrections and suggestions.
- Paul Stoop corrected a typo in
makeTime9. - Eric Bronner pointed out a confusion in the discussion of the order of operations.
- Alexandros Gezerlis set a new standard for the number and quality of suggestions he submitted. We are deeply grateful!
- Gray Thomas knows his right from his left.
- Giovanni Escobar Sosa sent a long list of corrections and suggestions.
- Alix Etienne fixed one of the URLs.
- Kuang He found a typo.
- Daniel Neilson corrected an error about the order of operations.
- Will McGinnis pointed out that
arc00002 was defined differently in two places. - Swarup Sahoo spotted a missing semi-colon.
- Frank Hecker pointed out an exercise that was under-specified, and some broken links.
- Animesh B helped me clean up a confusing example.
- Martin Caspersen found two round-off errors.
- Gregor Ulm sent several corrections and suggestions.
- Dimitrios Tsirigkas suggested I clarify an exercise.
- Carlos Tafur sent a page of corrections and suggestions.
- Martin Nordsletten found a bug in an exercise solution.
- Lars O.D. Christensen found a broken reference.
- Victor Simeone found a typo.
- Sven Hoexter pointed out that a variable named
arc00 shadows a build-in function. - Viet Le found a typo.
- Stephen Gregory pointed out the problem with
arcin Python 3. - Matthew Shultz let me know about a broken link.
- Lokesh Kumar Makani let me know about some broken links and some changes in error messages.
- Ishwar Bhat corrected my statement of Fermat's last theorem.
- Brian McGhie suggested a clarification.
- Andrea Zanella translated the book into Italian, and sent a number of corrections along the way.
- Lloyd Hugh Allen 指出了 8.4 节的一处错误。
- Yvon Boulianne 纠正了第 5 章中的一个语义错误。
- Fred Bremmer 提交了 2.1 节的一处更正。
- Jonah Cohen 编写了 Perl 脚本,把本书的 LaTeX 源转换为精美的 HTML。
- Michael Conlon 纠正了第 2 章的语法错误和第 1 章的文风问题,并首次引发了对解释器技术细节的讨论。
- Benoit Girard 纠正了 5.6 节中一个令人发笑的错误。
- Courtney Gleason 和 Katherine Smith 编写了
arc000023 ,它曾在本书的早期版本中作为一个案例研究。现在他们的程序可以在网站上找到。 - Lee Harr 提交的更正多到我们罗列不下,事实上他应当被列为本书的主要编辑之一。
- James Kaylin 是使用该教材的学生,他提交了大量更正。
- David Kershaw 修复了 3.10 节中损坏的
arc00002 函数。 - Eddie Lam 为第 1、2、3 章提交了大量更正。他还修正了 Makefile,使其在首次运行时生成索引,并帮我们建立了版本管理方案。
- Man-Yong Lee 纠正了 2.4 节示例代码中的错误。
- David Mayo 指出第 1 章中的「unconsciously」应改为「subconsciously」。
- Chris McAloon 提交了 3.9 和 3.10 节的多处更正。
- Matthew J. Moelter 是长期的贡献者,给本书发来了大量更正与建议。
- Simon Dicon Montford 报告了第 3 章中缺失的函数定义和若干错别字。他还发现了第 13 章中
arc000025 函数的错误。 - John Ouzts 纠正了第 3 章中「return value」的定义。
- Kevin Parks 就如何改进本书的发行方式提出了宝贵的意见与建议。
- David Pool 指出了第 1 章术语表中的一处错别字,并送上鼓励之言。
- Michael Schmitt 纠正了关于文件和异常那一章的一处错误。
- Robin Shaw 指出 13.1 节的一处错误:printTime 函数在示例中未经定义就被使用。
- Paul Sleigh 发现了第 7 章的一处错误,以及 Jonah Cohen 那个从 LaTeX 生成 HTML 的 Perl 脚本中的一个 bug。
- Craig T. Snydal 正在 Drew 大学的课程中试用本教材,提出了若干有价值的建议和更正。
- Ian Thomas 和他的学生在一门编程课中使用本教材。他们是最先测试本书后半部分章节的人,并做出了大量更正与建议。
- Keith Verheyden 提交了第 3 章的一处更正。
- Peter Winstanley 让我们注意到第 3 章中一个长期存在的拉丁文错误。
- Chris Wrobel 更正了关于文件 I/O 和异常那一章中的代码。
- Moshe Zadka 对本项目贡献巨大。除了撰写「字典」一章的初稿,他在本书早期阶段还持续提供指导。
- Christoph Zwerschke 发来了几处更正和教学建议,并解释了 gleich 与 selbe 的区别。
- James Mayer 给我们发来一大堆拼写和排版错误,其中包括贡献者名单里的两处。
- Hayden McAfee 发现两个示例之间一处可能令人困惑的不一致。
- Angel Arnal 是一个翻译本书西班牙语版本的国际团队的一员。他还在英文版中找到了若干错误。
- Tauhidul Hoque 和 Lex Berezhny 创作了第 1 章的插图,并改进了其他许多插图。
- Dr. Michele Alzetta 发现了第 8 章的一处错误,并就斐波那契和「老姑娘」游戏发来了有趣的教学评论与建议。
- Andy Mitchell 发现了第 1 章的一处错别字和第 2 章的一个破损示例。
- Kalin Harvey 建议在第 7 章做一处澄清,并抓出若干错别字。
- Christopher P. Smith 抓出了几处错别字,并帮我们把书更新到 Python 2.2。
- David Hutchins 发现了前言中的一处错别字。
- Gregor Lingl 在奥地利维也纳的一所高中教授 Python。他正在做本书的德文翻译,并揪出第 5 章中几个严重的错误。
- Julie Peters 发现了前言中的一处错别字。
- Florin Oprina 提供了对
arc00002 的改进、对arc000027 的更正,以及一个漂亮的错别字。 - D. J. Webre 建议在第 3 章做一处澄清。
- Ken 在第 8、9、11 章中找出了不少错误。
- Ivo Wever 发现了第 5 章的一处错别字,并建议在第 3 章做一处澄清。
- Curtis Yanko 建议在第 2 章做一处澄清。
- Ben Logan 发来了许多错别字以及把本书转换为 HTML 时的一些问题。
- Jason Armstrong 看到了第 2 章中缺失的单词。
- Louis Cordier 注意到第 16 章有一处代码与正文不符。
- Brian Cain 建议在第 2、3 章做若干澄清。
- Rob Black 发来一大堆更正,其中包括一些针对 Python 2.2 的改动。
- Jean-Philippe Rey(巴黎中央理工学院)发来若干补丁,包括对 Python 2.2 的更新和其他用心的改进。
- Jason Mader(乔治·华盛顿大学)提出了许多有用的建议和更正。
- Jan Gundtofte-Bruun 提醒我们「a error」本身就是一个错误。
- Abel David 和 Alexis Dinno 提醒我们「matrix」的复数是「matrices」而非「matrixes」。这个错误在书中存在了多年,但两位首字母相同的读者在同一天报告了它。真怪。
- Charles Thayer 鼓励我们去掉某些语句末尾的分号,并理顺「argument」和「parameter」的用法。
- Roger Sperberg 指出第 3 章中一段扭曲的逻辑。
- Sam Bull 指出第 2 章中一段令人困惑的段落。
- Andrew Cheung 指出了两处「use before def(定义前使用)」。
- C. Corey Capel 发现了调试第三定理中缺失的单词,以及第 4 章的一处错别字。
- Alessandra 帮忙澄清了一些关于 Turtle 的困惑。
- Wim Champagne 在字典示例中发现了一个低级错误。
- Douglas Wright 指出
arc中向下取整除法的一个问题。 - Jared Spindor 在句末发现了一些冗余内容。
- Lin Peiheng 发来了许多很有帮助的建议。
- Ray Hagtvedt 发来了两处错误和一处「差一点也算错误」的问题。
- Torsten Hübsch 指出 Swampy 中一处不一致。
- Inga Petuhhov 更正了第 14 章中的一个示例。
- Arne Babenhauserheide 发来了几处有用的更正。
- Mark E. Casida 很擅长发现重复的单词。
- Scott Tyler 补上了一个缺失的 that,随后又发来一大堆更正。
- Gordon Shephard 发来了几处更正,全都分开发在不同的邮件里。
- Andrew Turner 发现第 8 章的一处错误(原文把 spotted 打成 spot ted)。
- Adam Hobart 修复了
arc中向下取整除法的一个问题。 - Daryl Hammond 和 Sarah Zimmerman 指出我过早地抛出了
arc0000。而 Zim 还发现了错别字。 - George Sass 在「调试」一节中发现了一个 bug。
- Brian Bingham 建议了习题 10。
- Leah Engelbert-Fenton 指出我违反了自己的建议,把
arc00 用作变量名;随后又找出一堆错别字和一处「use before def」。 - Joe Funke 发现了一个错别字。
- Chao-chao Chen 发现斐波那契示例中的一处不一致。
- Jeff Paine 分得清 space 和 spam 的区别。
- Lubos Pintes 发来一个错别字。
- Gregg Lind 和 Abigail Heithoff 建议了习题 4。
- Max Hailperin 发来了许多更正和建议。Max 是卓越著作《Concrete Abstractions》的作者之一,读完本书后你也许会想读一读。
- Chotipat Pornavalai 在一条错误消息中发现了一个错误。
- Stanislaw Antol 发来了一份很有帮助的建议清单。
- Eric Pashman 为第 4–11 章发来了许多更正。
- Miguel Azevedo 发现了一些错别字。
- Jianhua Liu 发来一份长长的更正清单。
- Nick King 发现了一个缺失的单词。
- Martin Zuther 发来一份长长的建议清单。
- Adam Zimmerman 发现我的「instance(实例)」用例中有一处不一致,以及其他几处错误。
- Ratnakar Tiwari 建议加一条脚注来解释退化三角形。
- Anurag Goel 建议了
arc000032 的另一种解法,并发送了一些额外更正;而且他知道怎么拼写 Jane Austen。 - Kelli Kratzer 抓出了其中一个错别字。
- Mark Griffiths 指出第 3 章中一个令人困惑的示例。
- Roydan Ongie 在我的牛顿法中发现了错误。
- Patryk Wolowiec 帮我解决了 HTML 版本中的一个问题。
- Mark Chonofsky 告诉我 Python 3 中的一个新关键字。
- Russell Coleman 在几何方面帮了我。
- Wei Huang 发现了几处排版错误。
- Karen Barber 发现了本书中年代最久的错别字。
- Nam Nguyen 发现一个错别字,并指出我用了装饰器模式却没有点名。
- Stéphane Morin 发来了几处更正和建议。
- Paul Stoop 更正了
arc000033 中的一个错别字。 - Eric Bronner 指出了关于运算顺序讨论中的一处混淆。
- Alexandros Gezerlis 在提交建议的数量和质量上都树立了新标杆。我们深表感激!
- Gray Thomas 分得清他的左右。
- Giovanni Escobar Sosa 发来了一份长长的更正与建议清单。
- Alix Etienne 修复了一个 URL。
- Kuang He 发现一个错别字。
- Daniel Neilson 更正了关于运算顺序的一处错误。
- Will McGinnis 指出
arc00003 在两处定义不同。 - Swarup Sahoo 发现了一个缺失的分号。
- Frank Hecker 指出一道习题说明不够明确,以及一些失效的链接。
- Animesh B 帮我清理了一个令人困惑的示例。
- Martin Caspersen 发现了两个舍入误差。
- Gregor Ulm 发来了几处更正和建议。
- Dimitrios Tsirigkas 建议我澄清一道习题。
- Carlos Tafur 发来一页更正与建议。
- Martin Nordsletten 在习题解答中发现了一个 bug。
- Lars O.D. Christensen 发现了一个失效的引用。
- Victor Simeone 发现了一个错别字。
- Sven Hoexter 指出一个名为
arc00 的变量会遮蔽内置函数。 - Viet Le 发现一个错别字。
- Stephen Gregory 指出了
arc在 Python 3 中的问题。 - Matthew Shultz 让我知道有一个失效的链接。
- Lokesh Kumar Makani 让我知道一些失效的链接,以及错误消息中的若干变化。
- Ishwar Bhat 更正了我对费马最后定理的表述。
- Brian McGhie 建议做一处澄清。
- Andrea Zanella 把本书翻译成意大利语,并一路发来许多更正。