-
Notifications
You must be signed in to change notification settings - Fork 8
Expand file tree
/
Copy pathchapter00.tex
More file actions
452 lines (254 loc) · 16.7 KB
/
chapter00.tex
File metadata and controls
452 lines (254 loc) · 16.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
%LaTeXOnly
\input{latexonly}
\newtheorem{ex}{Exercise}[chapter]
\begin{latexonly}
\renewcommand{\blankpage}{\thispagestyle{empty} \quad \newpage}
%blankpage
%blankpage
%-half title----------------------------------------------
\thispagestyle{empty}
\begin{flushright}
\vspace*{2.0in}
\begin{spacing}{3}
{\huge 思考Python}\\
{\Large 像计算机科学家一样思考}
\end{spacing}
\vspace{0.25in}
Version \theversion
\vfill
\end{flushright}
%---------------------------
\blankpage
\blankpage
%---title page---------
\pagebreak
\thispagestyle{empty}
\begin{flushright}
\vspace*{2.0in}
\begin{spacing}{3}
{\huge 思考Python}\\
{\Large 像计算机科学家一样思考}
\end{spacing}
\vspace{0.25in}
Version \theversion
{\Large
Allen Downey\\
}
{\Large
翻译:韩骏超 刘宇辉 Zongru
\vspace{0.5in}
{\Large Green Tea Press}\\
{\small Needham, Massachusetts}
\vfill
\end{flushright}
%---copyright------------------
\pagebreak
\thispagestyle{empty}
{\small
Copyright \copyright ~2008 Allen Downey.
Printing history:
\begin{description}
\item[2002四月:] 第一版 {\em 像计算机科学家一样思考}.
\item[2007八月:] 大幅改动,把标题改为{\em 像(Python)程序员一样思考}.
\item[2008六月:] 大幅改动,把标题改为{\em 思考Python:像计算机科学家一样思考}.
\end{description}
\vspace{0.2in}
\begin{flushleft} %左对齐,类似的有flushright,centre
Green Tea Press \\
9 Washburn Ave\\
Needham MA 02492
\end{flushleft}
Permission is granted to copy, distribute, and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and with no Back-Cover Texts.
The GNU Free Documentation License is available from {\tt www.gnu.org}
or by writing to the Free Software Foundation, Inc., 59 Temple Place,
Suite 330, Boston, MA 02111-1307, USA.
The original form of this book is \LaTeX\ source code. Compiling this
\LaTeX\ source has the effect of generating 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
\url{http://www.thinkpython.com}
\vspace{0.2in}
}
\end{latexonly}
%htmlonly
\begin{htmlonly}
%Title page for html version
{\Large \thetitle}
\{\Large Allen B.Downet}
\{\Large 翻译:Walter Lewis}
Version \theversion
\setcounter{chapter}{-1}
\end{htmlonly}
\chapter{前言}
\section{本书的奇怪历史}
1999年一月份的时候,我准备用Java教一门介绍性的编程课。在那之前,我已经
教了三次,而且每次我都很失望。这门课的挂课率非常之高,尽管对那些通过的学
生来说,整体的水平也是很低的。\\
我认为问题的根源之一是教科书。教科书太厚了,掺杂着大量不必要的Java细节
内容,并且没有足够高水平的引导去指导学生如何编程。学生们深陷“陷阱门“:他们起步很轻松,逐步的学习,突然,大约在第五章的某个位置,困难出现了。学生必须快速的学习大量的新内容。结果,我不得不把剩下的学期花在挑选一些片段来教学。\\
课程开始的前两周,我决定自力更生---自己编写书。我的目标是:
\begin{itemize}
\item 尽量简短.对学生来说,阅读十页比阅读五十页要好。
\item 注意词汇量。我尽量减少使用术语,而且在使用前必须先定义。
\item 逐步学习。为了避免陷阱门,我把最难的部分分解成一系列的小步骤。
\item 把重心放在编程,而不是编程语言。我采用最少的有用的Java语言的语法,
忽略其他的。
\end{itemize}
我需要一个书名,所以我就临时地把它叫做《像计算机科学家一样思考》\\
第一版很粗糙,但是很成功。学生们很乐意看它,并且能很好理解我在课堂上讲的难点,趣点和让他们实践的内容(这个最重要).\\
我用GNU自由文档许可证发布了这本书,读者们可以自由的复制,修改,发布这本书。 \\
\index{GNU Free Documentation License}
\index{Free Documentation License,GNU}
接下来发生的事儿极其的有趣。Jeff Elkner,居住在弗尼亚的高中老师,改变了我的书,把它翻译成了Python。他给我寄了份他翻译的副本,于是乎我就有了一段不寻常的学习Python的经历--通过阅读我自己的书。\\
Jeff和我随后修订了这本书,加入了Chris Meyers提供的一个案例学习。在2001年,我们共同发布了《像计算机科学家一样思考:Python编程》,当然同样是用GNU自由文档许可证。通过Gree Tea Press,我出版了这本书,并且开始在亚马逊和大学书店卖纸质书。Gree Tea Press出版的书可以从这儿获得\url{greenteapress.com}\\
2003年,我开始在Olin College教书。第一次,我开始教Python。和教授Java的情况相反,学生们不再陷入泥潭,学到了更多,参与了很多有趣的项目,越学越带劲。\\
在过去的五年里,我一直继续完善这本书,改正错误,提过某些例子的质量,加入一些其他的材料,特别是练习。在2008年,我开始重写这本书---同时,剑桥大学出版社的编辑联系到了我,他想出版本书的下一板。美妙的时刻!\\
结构就出现了现在的这本书,不过有了一个简洁的名字《思考Python》。变化有:
\begin{itemize}
\item 在每一章末尾加了点调试的部分。这些部分提供了发现和避免bug的通用技巧,也对Python的陷阱提出了警告。
\item 删除了最后几章关于列表和树实现的内容。虽然,我万分不舍,但是考虑到和本书余下的部分不协调,只能忍痛割爱。
\item 增加了一些案例学习---提供了练习,答案和相关讨论的大例子。一些东西是基于Swampy,这是我为了教学而设计的Python程序。
Swampy,代码实例和部分答案可以从这儿获得\url{thinkpython.com}.
\item 扩展了关于程序构建计划和基本的设计模式的讨论。
\item Python运用的更加地道。虽然这本书仍然是讨论编程的,而不是Python本身,但是现在我不得不承认这本书深受Python浸染。
\end{itemize}
我希望读者们可以享受这本书,也希望帮助你学习程序设计和像计算机科学家一样思考,哪怕是一丁丁点儿。\\
Allen B. Downey\\
Needham MA\\
Allen Downey 是Olin College 大学计算机科学与技术系的副教授。
\section*{致谢}
首先也是最重要的,我要感谢Jeff Elkner将我的Java教材译为Python版本,为此项目奠基并且向我介绍了Python语言,它现在已经是我最的首选编程语言.
感谢Chris Meyers,向{\em 如何像一个计算机科学家思考}一书也就是本书的前身贡献了若干内容.
感谢自由软件基金会开发了GNU Free Document License这一授权协议,使我与Jeff,Chris的共事得以成为现实.
\index{GNU Free Document License}
\index{Free Document License, GNU}
感谢Lulu的编辑们为本书前身{\em 如何像一个计算机科学家思考}付出的努力.
感谢所有为此书早期版本做出努力的学生与所有向我寄送更正与建议的贡献者(在后面列出).
更感谢我妻子Lisa为此书,还有绿茶出版,以及其他所有事情做出的工作.
\section*{贡献者列表}
\index{贡献者}
100多位目光锐利,头脑灵活的读者在过去的几年中寄给我许多建议与更正。他们的贡献和热忱对项目建功颇多.
如果你有建议或者更正,也请寄送email至{\tt feedback@thinkpython.com}.如果我基於你的反馈做出了修改,你将被列於此贡献者列表(除非你自己申明愿意被忽略).
如果能够附上出现错误的句子,哪怕是一部分,将有助我进行搜索。页码与章节序号亦可,不过句子更方便。谢谢。
\small
\begin{itemize}
\item Lloyd Hugh Allen 提交了第8.4节的一个更正.
\item Yvon Boulianne 寄给我第5章的一个更正.
\item Fred Bremmer 提交了第2.1节的一个更正.
\item Jonah Cohen 撰写了将LaTeX源代码转换为漂亮的HTML文件的Perl脚本.
\item Michael Conlon 提交了第2章的一个语法更正与第1章的一个文风改善意见,还发起了关於解释器的技术层面的讨论。
\item Benoit Girard 提交了第5.6节的一个比较滑稽错误的更正。
\item Courtney Gleason 与 Katherine Smith 撰写了{\tt horsebet.py},用作此书早期版本的一个参考案例。此程序可以在网上找到。
\item Lee Harr 提交了很多更正,因为空间有限无法一一列出。因为贡献较大,其实他可以称作此书的重要编辑之一。
\item James Kaylin 是一个使用此教材的学生,提交了大量的更正。
\item David Kershaw 修正了第3.10节的{\tt catTwice}函数。
\item Eddie Lam 提交了第1,2,3章的大量更正。他也修正了Makefile,使得在第一次运行时可以生成一个索引。本书的版本计画也由他发起。
\item Man-Yong Lee 提交了第2.4节的一个例题代码的一个更正。
\item David Mayo 指出第1章的一个用词不当。
\item Chris McAloon 提交了第3.9节与第3.10节的若干更正。
\item Matthew J. Moelter 曾长期关注此书,提交了大量的更正与建议。
\item Simon Dicon Montford 报告了第3章的一个缺失函数定义错误与若干拼写错误。亦指出第13章中{\tt increment}函数的错误。
\item John Ouzts 更正了第3章中的关於返回值的定义。
\item Kevin Parks 针对如何提高此书的发行质量提交了宝贵的评论与建议.
\item David Pool 提交了第1章的术语表中一个拼写错误,而且给我们打气。
\item Michael Schmitt 提交了关於文件於异常章节中的一个更正.
\item Robin Shaw 指出了13.1中的一个错误(一个范例中使用printTime函数但是没有事先定义)。
\item Paul Sleigh 找出了第7章的一个错误,且发现了Jonah Cohen用来从LaTeX生成HTML页面的Perl 脚本中的一个bug.
\item Craig T. Snydal於Drew大学实践此教材。他贡献了数处有用的建议与更正.
\item Ian Thomas 与他的学生在一个编程课程中使用此教材。他们是此书后面一半章节最早的实践者,也提出了大量的更正与建议.
\item Keith Verheyden提交了第3章的一个更正.
\item Peter Winstanley给我们指出了第3章中一个长期存在的错误。
\item Chris Wrobel 贡献了若干关於文件I/O与异常章节中的更正.
\item Moshe Zadka对此项目做出了难能可贵的贡献.除了为此书开头部分撰写了辞典范例相关内容,在整个此书的早期阶段他一直提供指导。
\item Christoph Zwerschke 提交了数处更正与教学考虑上的建议, 并向我们解释了{\em gleich}与{\em selbe}之间的差别.
\item James Mayer 向我们提交了一大堆的拼写与录入错误,包含这个贡献者列表中的两个.
\item Hayden McAfee 指出了两个范例中可能存在的令人困惑的不一致.
\item Angel Arnal 是本书的西班牙文版本翻译组成员之一.他亦找出了英文版本的数处错误.
\item Tauhidul Hoque 与 Lex Berezhny 创建了第1章插图并提高了其他数处插图的质量.
\item Dr. Michele Alzetta 找出了第8章的一个错误并且针对Fibonacci与Old Maid这两个范例提交了一些从教学方面的评论与建议.
\item Andy Mitchell 找出了第1章的一个拼写错误与第2章的某范例的阙漏之处.
\item Kalin Harvey 建议对第7章的一处概念澄清并且提交了一些拼写错误.
\item Christopher P. Smith 找出了数处拼写错误并且协助我们将此书针对Python 2.2做了更新。
\item David Hutchins 找出了序中的一个拼写错误.
\item Gregor Lingl於奥地利维也纳的某高中教授Python,他正在从事此书的德文翻译并且找出了第5章的若干重要错误。
\item Julie Peters 找出了前言中的一个拼写错误.
\item Florin Oprina 提交了{\tt makeTime}中的一个改善,一个{\tt printTime}中的更正, 与一个拼写错误.
\item D.~J.~Webre 建议了第3章的一个概念澄清.
\item Ken 找出了第8, 9,11章中的大量错误.
\item Ivo Wever 找出了第5章中的一个拼写错误并且建议了第3章中的一个概念澄清.
\item Curtis Yanko 建议了第2章中的一个概念澄清.
\item Ben Logan 提交了大量的拼写错误与若干将此书转换为HTML格式的错误。
\item Jason Armstrong 指出了第2章一处语法阙漏.
\item Louis Cordier指出第16章某处代码与文字不相符合.
\item Brian Cain 建议了数处第2章与第3章的若干概念澄清.
\item Rob Black 提交了大量更正,包含某些针对Python 2.2的修改.
\item Jean-Philippe Rey来自於巴黎的Ecole Centrale,提交了大量的补丁,包含某些针对Python 2.2的修改与一些有想法的改善.
\item Jason Mader来自於George Washington 大学提交了大量的有用的建议与更正.
\item Jan Gundtofte-Bruun指出一个语法错误.
\item Abel David 与 Alexis Dinno 提醒我们``matrix''的复数形式为``matrices'',而非``matrixes''.此错误存在於本书中有数年之久,但是两位读者在同一天向我们指出了,不可不谓奇。
\item Charles Thayer指出了数处语法错误。
\item Roger Sperberg 指出了第3章某处逻辑有误.
\item Sam Bull 指出了第2章某处令人困惑的段落 .
\item Andrew Cheung 指出了两处使用之后才定义的错误。
\item C. Corey Capel 指出了一个语法错误与一个拼写错误.
\item Alessandra帮助我们澄清了某些概念.
\item Wim Champagne在辞典范例中指出一处错误.
\item Douglas Wright 指出了{\tt arc}中的一个除法相关错误.
\item Jared Spindor指出一些语法错误.
\item Lin Peiheng 提交了大量的非常有益的建议.
\item Ray Hagtvedt提交了两处错误与一处似是而非的地方.
\item Torsten H\"{u}bsch 指出了Swampy范例中某处不一致.
\item Inga Petuhhov 更正了第14章中的某个一个范例.
\item Arne Babenhauserheide 提交了数处有益的更正.
\item Mark E. Casida非常擅长於给我们指出重复用词的地方.
\item Scott Tyler 提交了大量更正.
\item Gordon Shephard 给我们发送了多封信件,提交了数处更正.
\item Andrew Turner指出了第8章的一个错误.
\item Adam Hobart 修正了{\tt arc}中的一个除法相关错误.
\item Daryl Hammond 与 Sarah Zimmerman 指出我过早地提到了{\tt math.pi} . Zim也指出了一个拼写错误.
\item George Sass 在调试章节指出了一个错误.
\item Brian Bingham 建议了练习题~\ref{exrotatepairs}.
\item Leah Engelbert-Fenton 指出了我使用{\tt tuple}作为变量名,与之前的我自己的建议背道而驰. 之后又发现了大量拼写错误与一处``定义之前使用''。
\item Joe Funke指出了一个拼写错误.
\item Chao-chao Chen 发现了Fibonacci范例中的某处不一致.
\item Jeff Paine指出了一处语法错误.
\item Lubos Pintes 提交了一个拼写错误.
\item Gregg Lind 与 Abigail Heithoff 建议了练习题~\ref{checksum}.
\item Max Hailperin 提交了大量的更正与建议. Max 是著名的{\em
Concrete Abstractions}一书的作者之一,你读完此书再把那本书找来阅读学习效果可能会更好。.
\item Chotipat Pornavalai 指出了一个错误信息中的错误.
\item Stanislaw Antol 提交了大量的非常有益的建议.
\item Eric Pashman 提交了第4--11章的大量的更正.
\item Miguel Azevedo指出若干拼写错误.
\item Jianhua Liu 提交了大量的更正.
\item Nick King指出一处语法阙漏.
\item Martin Zuther 提交了大量的建议.
\item Adam Zimmerman指出数处错误.
\item Ratnakar Tiwari 建议了一个解释退化三角形的脚注.
\item Anurag Goel 建议了若干更正.
\item Kelli Kratzer指出一处拼写错误.
\item Mark Griffiths 指出了第3章的范例中某令人困惑之处.
\item Roydan Ongie指出关於Newton法的一个错误.
\item Patryk Wolowiec 协助我修正了关於HTML版本的一个错误.
\item Mark Chonofsky 告诉我Python 3.0的一个新的关键词.
\item Russell Coleman在几何学方面协助过我.
\item Wei Huang指出数处录入错误.
\item Karen Barber指出书中最古老的拼写错误之一.
\item Nam Nguyen指出一个拼写错误并且指出了我使用了Decorator模式但是没有提到它的名字。
\item St\'{e}phane Morin提交了数处更正与建议.
\item Paul Stoop更正了一个拼写错误.
\item Eric Bronner指出了操作符优先级别讨论中的一处困惑之处。
\item Alexandros Gezerlis指出了大量的高质量的建议,我们相当感激!
\item Gray Thomas指出了一处错误.
% ENDCONTRIB
\end{itemize}
\normalsize
\clearemptydoublepage
\begin{latexonly}
\tableofcontents
\clearemptydoublepage
\end{latexonly}