《“笨办法”学Python(第3版)》是一本Python入门书籍,适合对计算机了解不多,没有学过编程,但对编程感兴趣的读者学习使用。《“笨办法”学Python(第3版)》以习题的方式引导读者一步一步学习编程,从简单的打印一直讲到完整项目的实现,让初学者从基础的编程技术入手,体验到软件开发的基本过程。4 B, t) W, X+ M2 A% M% U$ W: x
《“笨办法”学Python(第3版)》结构非常简单,共包括52个习题,其中26个覆盖了输入/输出、变量和函数三个主题,另外26个覆盖了一些比较高级的话题,如条件判断、循环、类和对象、代码测试及项目的实现等。每一章的格式基本相同,以代码习题开始,按照说明编写代码,运行并检查结果,然后再做附加练习。2 ]* O8 t" w$ p+ G% a: F/ g" a' i! d
作者简介) A( d, K, _: ?# r
Zed A.Shaw,是一位狂热的吉他手、程序员和编程书作家。他的这本书在全世界有数百万的读者。他写的软件大大小小的公司都在使用。他的文章经常被众多极客圈里的人阅读和引用。他是一名活跃而有趣的作家,他会让你大笑,也会让你思考。* W1 n. K0 A0 j( \* h
目录; `4 ?. W3 R7 o! o) a, ?
版权信息
" M, O" i" E R/ y( }; ] 译者序
/ c$ q8 i J2 c5 Q2 r$ n# h 前言. }5 B5 u/ g( k% {, i* O5 a
习题0 准备工作; n2 Y& P6 R; W$ `! N& K
Mac OSX; @% }- C0 ~- k) T3 ^+ T
Windows
0 Q1 n& K U% B: r4 c Linux1 B* W4 `5 C5 b% [: t9 b
给新手的告诫7 q1 \$ p0 b" h3 @! Q" D3 |
习题1 第一个程序1 p& i" u) ^( w* c4 U
应该看到的结果
: c' N+ { [/ ?, n+ K$ w 附加练习0 a0 y! ?) g" J' X
常见问题回答
& E6 m$ k0 l7 h" Y4 M& M) K1 p 习题2 注释和#号* c3 [, l j Y& b8 `2 n
应该看到的结果
8 z- k; e! f8 G8 x' W# ?- x7 ? 附加练习
% a8 r0 O V5 Q( C 常见问题回答
& _3 h# |# Y3 j0 P5 {* y2 L; z# h 习题3 数字和数学计算
' {, T1 ^' ]# b& F 应该看到的结果
+ X7 p. C9 K( K: S 附加练习 [) W( I7 b: N) A$ V
常见问题回答7 \. [! @! h: ^, U4 c. b9 s) e) S- W6 m
习题4 变量和命名
3 q4 x- q1 q7 p2 [" U" B 应该看到的结果
7 T; a5 }- g3 ^0 l3 @ 附加练习+ a) o7 N& j- j8 t+ A% ]
常见问题回答' N) P ^1 q( f( U2 c, T! M# B
习题5 更多的变量和打印/ e5 j8 S6 n$ N+ p) d8 m
应该看到的结果) o8 u% x g$ z5 C4 u( `: e
附加练习8 u( X$ D2 j, K" W% h5 X X/ L
常见问题回答$ s8 ?# a/ J. P* z4 r
习题6 字符串和文本
3 o$ E( b/ J: C4 l9 f 应该看到的结果
} @& G7 Z5 q4 J( y# u2 ]. R7 v 附加练习! Z# m2 P r( U9 S
常见问题回答
0 T! J7 ]4 G% w5 K* a 习题7 更多打印' m* C/ m1 W# I1 f s& K
应该看到的结果4 y: J0 k( f# r. c2 L' c; o
附加练习
1 q' s4 \0 L0 f. {4 v& j 常见问题回答 Q, V1 f- d1 w' d2 t( p2 I
习题8 打印,打印
$ c5 b; ?8 ^* l9 g7 H 应该看到的结果
/ w0 P& }0 I3 N3 H5 y1 \' ?7 r5 ?$ J% |1 S 附加练习
; [+ y3 F2 v: e' @9 m/ B 常见问题回答+ ^9 z/ r9 L+ Q x L
习题9 打印,打印,打印
" Z/ e" k3 l7 Y' f' H8 c) ^+ Z 应该看到的结果4 x5 _& ^. A9 t$ D6 z7 u
附加练习& s* V. s* H8 {
常见问题回答
- P ?+ _# s3 p& J 习题10 那是什么
. \: t4 @) Y0 m- ~ 应该看到的结果
$ q8 U+ W- i2 D' [& w 转义序列
- A0 D7 L' E0 |- r6 s$ A. H D 附加练习
Y) H6 k& `/ j# c 常见问题回答
) R( u" W7 p3 x 习题11 提问
" v& m2 u$ l3 ^/ C. g) H8 W) I 应该看到的结果
# F$ z& H7 t' Y: I" t 附加练习
' S' ?( j1 p0 `8 o 常见问题回答 e0 Z3 x( q/ N' r, p2 C
习题12 提示别人
' Z# C4 F! b6 A! T+ ^ 应该看到的结果
5 x5 @9 }1 a. K' {4 u- M 附加练习
0 U/ T+ C4 B$ J; B% V6 I6 c8 y 常见问题回答
4 c' A% m }7 x# k 习题13 参数、解包和变量
+ \: K& r1 y) o3 m 等一下!“特性”还有另外一个名字- x; ^7 j9 p! A! j6 w
应该看到的结果4 C, ^# ?' T( ]7 q- ]
附加练习5 H# m% I1 {% W4 [- h
常见问题回答3 i* k6 V- t( x5 W [ L
习题14 提示和传递
! V) T! X3 x0 P! M S B% z: h7 G+ F0 T 应该看到的结果
: [$ y1 _9 C9 j- R$ l, P6 Q 附加练习! Q" Y: {6 {; C, U+ e1 P! l
常见问题回答
( S& o, F9 a& X" x# o( M0 A( j- w 习题15 读取文件) |! k1 h. M, e
应该看到的结果; |' a7 D% X) i( u
附加练习( ^5 d& r! d% q
常见问题回答! r2 b& u, {" w
习题16 读写文件
O6 D2 H' x- F$ R8 P 应该看到的结果
3 w: q$ |& X, a 附加练习. a8 W0 V, T9 a$ F
常见问题回答
3 Z! x3 ]% \- H, p' `+ ~3 R! V 习题17 更多文件操作
K. H5 a: L+ S. ^$ u) w8 n 应该看到的结果
# j0 n6 w# i9 L8 f* h 附加练习
) N# n* D$ ? p- c 常见问题回答
1 l9 h; l: K5 M1 W8 E' N$ M; d3 _; b 习题18 命名、变量、代码和函数; @$ ~; J* W0 I
应该看到的结果3 b% R/ q/ |9 L! i1 ^ K
附加练习% X7 W0 |1 d: n
常见问题回答
9 V2 x" I$ H; O- K) A 习题19 函数和变量
$ V. s% q1 e; i3 R4 k- w/ h 应该看到的结果
. @- U$ S; b5 c6 D 附加练习
* ~, {/ g( _7 e, x. N% ?; V- k/ o2 M 常见问题回答
5 F5 _' }( P, \ 习题20 函数和文件' w! P7 B, e7 P) q, R: O7 L
应该看到的结果0 s8 x) o" y1 B9 x6 D [
附加练习
9 ^. \. V# I: a; x0 e 常见问题回答
& D% L6 Y' K9 I# j5 n 习题21 函数可以返回某些东西. Y' e, f# \+ C, u
应该看到的结果
& o- K& ?/ O. X4 t# o 附加练习7 H- B( l2 J/ [
常见问题回答/ `, ^2 G$ F3 U7 c
习题22 到现在你学到了哪些东西
/ r" _3 x# y0 ]5 {9 D 学到的东西" @7 c p1 y( e$ R
习题23 阅读一些代码2 y+ n o8 h/ d! ^7 ^
习题24 更多练习
" y( k+ s/ M/ R) V" |5 d- k/ f 应该看到的结果' ^/ ?. Q M& x) [3 |
附加练习% H$ M# @* }# f! j! N# s5 W
常见问题回答
j3 |5 _. H( E$ G& Z" @* [ 习题25 更多更多的实践
4 P. Y S9 J" K/ H 应该看到的结果
( \5 T* J1 Y0 ^. ^" _' q 附加练习" O- y3 g0 H1 x7 t
常见问题回答
, g ^/ |/ q3 t 习题26 恭喜你,现在可以考试了!
: y. I7 |: R1 m/ L- n 常见问题回答+ {- U$ K T) r% @( J
习题27 记住逻辑关系, f) F/ ]1 ^! j
逻辑术语7 g# P9 Z* W1 Q8 Q
真值表
$ R7 v3 Y* l& O 常见问题回答
1 e. ?; d( Y& K$ \" K 习题28 布尔表达式练习
4 ^$ b" {; E! n( v) L2 e/ ] 应该看到的结果
0 C; I1 k& S$ a0 H 附加练习, M* I2 O' e2 b/ ~9 y7 Y
常见问题回答
8 `; Q* |: |: F: ] 习题29 if语句) J/ `: L3 Y( x& d2 E/ _
应该看到的结果" J7 l( F' b* }' F8 V/ [
附加练习
# M, p7 B, n. h9 P; E5 l 常见问题回答
: k- J! y3 M2 `& i5 A 习题30 else和if) A% V3 e/ Z( F* `) i
应该看到的结果( q7 b" g3 b) l+ q& L* U% B" @
附加练习
7 ]: [- v* G3 C) ]& F& `. x 常见问题回答9 k! N* U- }! A9 f' a! I! I
习题31 作出决定
* z2 C Q; H* n# x0 Y1 f3 O& K1 T; i; j 应该看到的结果4 \$ r' \4 ^0 [6 G5 M1 o4 B8 ^
附加练习/ S2 s+ E" K3 K' {
常见问题回答8 h) j* H% L; d. ^4 k# h
习题32 循环和列表
/ e2 r7 m# o- g- c 应该看到的结果( e3 X9 N/ G1 @4 l
附加练习% ^+ e. u8 u* W% O( Y; m# h
常见问题回答
1 S+ p% \9 x% B8 L) H( F 习题33 while循环
U# A1 l( J, q' G 应该看到的结果# }5 x3 c3 ?2 v+ T/ L' i: P! Q* y
附加练习
0 G! a5 b+ q8 }" s- p 常见问题回答
# @+ ~6 c9 ?0 \7 n. P% S 习题34 访问列表的元素$ O4 g3 E$ l" T( K$ g* t
附加练习
( V6 s+ f2 p) I1 B/ ~ 习题35 分支和函数. f! S) H ` P9 d9 H9 J8 V( B
应该看到的结果# c; ?! [3 }) Y9 t1 n0 g
附加练习. a& r5 o [6 K8 O* ~ R) M3 v
常见问题回答 D c, E6 o# P, x f5 s9 S% B2 a
习题36 设计和调试0 w4 T: H$ p( R( A9 A; k
if语句的规则
% j9 l! s9 Y% C6 I' A$ E 循环的规则
7 P S0 M6 O: d5 x4 e 调试的小技巧
) Q+ C9 l# ]) N8 D/ q' ?' `7 T/ E 家庭作业
! L% O( I0 Q/ r/ e" R( p! | 习题37 复习各种符号2 E) ~. y7 V+ f
关键字. w4 G6 ?1 ?$ [, n' w; c
数据类型
8 J) q5 _0 X9 j7 S: i 字符串转义序列
- B6 E4 d& S* h/ v4 d2 D 字符串格式化3 S4 H$ {/ P4 [
操作符
( g' L! p9 T/ F8 ~% p5 k 阅读代码
* X2 k$ c6 }) k 附加练习
! U$ z0 o& i" y4 v4 z7 D8 M5 j/ e 常见问题回答
: F8 m: {: a% R 习题38 列表的操作
. H, u9 K' Z8 d 应该看到的结果. k1 @( U3 G. Y" I& @
附加练习4 k, W" x! V9 m5 @0 P! H) W$ u1 ^
常见问题回答6 R. F& ^- C% _; M7 \
习题39 字典,可爱的字典
6 z& H0 x6 Z. d% a: O; Z, \# I/ x 应该看到的结果1 N5 k4 F. B$ Y
附加练习
, X; E& |- I/ k, f! L, i6 h3 \ 常见问题回答
4 a6 `! H# ^! u6 B" Y) z 习题40 模块、类和对象
) O- o; a- u' F5 N 模块和字典差不多, _, g4 [/ Q( R9 X; |6 |+ j
类和模块差不多, N% ^' O9 _" E4 W
对象相当于迷你导入
a5 B; y" P8 p7 W: x5 P3 g 获取某样东西里包含的东西2 M6 G, d' x% O4 a. r+ b, u d
第一个关于类的例子6 M6 ^& E* P+ P$ s/ T" m
应该看到的结果
* y# R. A8 F* w* j% `$ \9 A 附加练习
! c f/ u% U/ \6 B 常见问题回答! {0 s5 t; Q/ L3 @7 }
习题41 学习面向对象术语
, j- H" R% }/ ~* o6 T S: T' S 单词练习8 n% o) S ?# P# \2 ^% L; k+ ]3 S9 E
语汇练习* D# S1 H+ K! a, p- T2 L u; y
混合巩固练习
& J% B$ K; a+ J i9 | 阅读测试4 N9 H& L& @7 x8 m# G
练习从语言到代码
- p2 j7 _3 e% q% [ 阅读更多代码- D0 D; a! p# I' r) v5 H
常见问题回答
. |% v* ?; ~; e8 k 习题42 对象、类及从属关系
5 \/ S$ d3 f% N7 L3 ? 代码写成什么样子
7 m$ d' g b4 A2 c2 _' W; b 关于class Name(object)7 ]# R6 Z H, f" z
附加练习
6 U9 T, |5 x# q% p0 o) I2 g& Y3 ] 常见问题回答# Y" H4 ]! i" j& X( h9 z; C* Y
习题43 基本的面向对象分析和设计' J `9 [8 B& q+ q/ q' J
简单游戏引擎的分析; S$ j2 b1 q2 H: B' O2 e
自顶向下与自底向上
) y8 | p3 q4 B4 c n# s9 o 《来自Percal 25号行星的哥顿人》的代码
/ ?- I! C' q! d2 w( L2 |- f( t 应该看到的结果
" M2 x; Q2 G& T) ~$ z7 ~ 附加练习0 k7 S- l( z* P ]. h/ ?! ^
常见问题回答0 B c0 x2 _7 I
习题44 继承与合成
E. b+ |( ]5 I6 @. l$ V/ R+ @ 什么是继承
$ Q2 [8 I& y: o3 J3 L' ~ 三种方式组合使用
* G* p, K( d( m 合成
/ q: k0 D$ ^; _% }5 r; h 继承和合成的应用场合* M9 ]; u/ @9 t! ?9 W; p* Y1 t
附加练习
4 s( `, o% ?3 X* D6 }, _ N3 K2 N 常见问题回答
' G! t+ i. ]$ w" A; _8 v! X) d 习题45 你来制作一个游戏% }1 l, Y" r o4 Z1 K4 B) c! [. J
评价你的游戏
, U: {* Q/ T! { 函数的风格$ v: h: z" U2 R( n4 ?* b
类的风格
2 t+ ]4 l; w2 U 代码风格9 n. i" {7 x- w6 p$ P1 F
好的注释
D3 n) J5 b. b8 j 为你的游戏评分
& [. E) f, {3 ~ 习题46 项目骨架
; ^1 z) S, f/ j4 |/ p& T* X Python软件包的安装
+ d+ ^( W5 m! v( d" l* a- q" f. o 创建骨架项目目录' w7 } y/ S" d3 e6 Z* u
测试你的配置
4 t+ C3 o- S6 f3 h1 Q5 b O 使用这个骨架
( N5 e0 t1 |7 Q. |/ f 小测验
- j3 ?, E- m; g7 q 常见问题回答
4 N6 {3 g' n# u+ _) g% C! @4 o0 b+ w 习题47 自动化测试
; s' O# l2 W! w9 _2 ]+ o3 Z 编写测试用例
" m* k* P2 c: P 测试指南3 v: h- D2 H! c* v8 y$ w
应该看到的结果' N7 [: o7 d. Z7 G* Z/ ~0 T) h2 O
附加练习7 y* v Y" P, Z: p/ U# d& E
常见问题回答
: ?# V/ S0 S( r% Y 习题48 更复杂的用户输入4 X" L& t3 l, E
我们的游戏语汇& l& a( V' W* b( k" W
应该测试的东西, {5 d9 l! k; [! {* P
设计提示
8 N4 L- f7 P: t2 g3 d 附加练习4 @# C# F; Y+ C/ I! N
常见问题回答) S, y/ q2 d" [' K% Y0 Q$ O
习题49 创建句子! M6 c: o! T ~2 ~: A7 o
match和peek6 A9 u$ M# ~9 C" ^6 u5 G
句子的文法
0 Q5 g& [* M, J5 G# G6 n0 r N7 B 关于异常; _5 T2 g/ b+ j* c( H
应该测试的东西6 j, ^7 ~, w+ X7 K I8 H
附加练习; `) f1 |' ]3 g6 Y* u! u) D9 L
常见问题回答3 W" X) y& Z) A e9 V+ H
习题50 你的第一个网站( J+ N9 E, q# T2 b
安装lpthw.web
# E6 `$ P- {7 j 写一个简单的“Hello World”项目
+ |+ K# J4 F9 e 会发生什么. D1 M$ i: A3 r& v# k( K% `
修正错误! Z$ `* D. s: }) z
创建基本的模板文件- [! ]6 ?% y( b& E" D4 `
附加练习# |8 V, B8 p8 ~( `" j
常见问题回答
7 k V) T% F3 }5 G 习题51 从浏览器中获取输入
?3 P' j r9 n- S Web的工作原理
4 l$ V5 [+ w- J" p1 J# ` 表单的工作原理3 a1 a7 |8 x4 m9 K
创建HTML表单
, W) ]! b8 W/ {# O 创建布局模板
5 Q. p U+ ?& r/ O7 O( j5 G 为表单撰写自动测试代码
/ Y" T+ l; Q. K6 m1 H 附加练习
! k7 Q: E. R" F8 M R* k7 \. z9 } 常见问题回答
$ G% `* m( N/ F! F4 I 习题52 创建Web游戏1 D6 B0 n2 k5 O7 k6 G/ c* w# W8 N
重构习题43中的游戏) U& e6 P$ u+ F* i
会话和用户跟踪, `# N# @2 b+ D
创建引擎
! j, F0 o8 d+ n. J: C! X# k w 期末考试
9 U H( c; K' s0 {8 o' c/ b4 B3 a 常见问题回答: [- {8 E& E" F) k, S
接下来的路8 L) m# s! `( |
怎样学习任何一种编程语言
- h, M3 v9 ^6 V; ^. q1 M5 {2 P 老程序员的建议1 Z) s% b1 D* j' f5 O6 ]* h% y6 R
附录 命令行快速入门
8 w( ]! w& U$ `' C4 n* M8 R 简介:废话少说,命令行来也
. o+ o) a9 z! O( R 习题1 准备工作
& i: j% C# X4 G0 n7 l. t 习题2 路径、文件夹和目录(pwd)
: I4 U0 Z' Q" N 习题3 如果你迷失了
2 d1 P( y# U! O) N, L" Y 习题4 创建目录(mkdir)
; V# f4 ^1 U) ?. b; Z3 w0 v$ I 习题5 更改目录(cd)
. d/ H# F4 l, A2 H/ Z 习题6 列出目录下的内容(ls) Y# U4 C4 K# m# c: F
习题7 删除路径(rmdir)2 N0 j. P7 Y! x# u
习题8 在多个目录中切换(pushd,popd)
/ N ]. `8 J. L5 y p7 ? 习题9 创建空文件(touch,New-Item)8 y! i5 A. f& _, W/ [; W/ B9 g
习题10 复制文件(cp)
2 S0 u1 ]% r9 m6 P1 C 习题11 移动文件(mv)3 U) Z; G& P) l$ r# A% U1 H
习题12 查看文件内容(less,MORE)
2 Q- S9 p+ R$ o8 V9 h8 V 习题13 流文件内容显示(cat)
7 K+ J% ^4 L$ D% ?8 d, M 习题14 删除文件(rm)1 q4 v; _+ c* |" E8 U2 ]
习题15 退出命令行(exit)0 G _" H; p7 i6 [
命令行将来的路8 h) Z5 W. D2 c( }1 F0 z0 P& [
前言
+ w& {! Q# ?" t5 \) q9 s. I 这本书的目的是让你起步编程。虽然书名说是用“Hard Way”(笨办法)学习写程序,但其实并非如此。所谓的“笨办法”指的是本书的教学方式,也就是所谓的“指令式”教学。在这个过程中,我会让你完成一系列习题,而你则通过重复练习来学到技能,这些习题也是专为重复练习而设计的。对于一无所知的初学者来说,在能理解更复杂的话题之前,这种教授方式效果是很好的。你可以在各种场合看到这种教授方式,从武术到音乐不一而足,甚至在学习基本的算术和阅读技能时也会看到这种教学方式。6 m( M7 E/ i7 n$ m# |
这本书通过练习和记忆的方式,教你逐渐掌握Python的技能,然后由浅入深,让你将这些技能应用到各种问题上。读完本书以后,你将有能力接触更为复杂的编程主题。我喜欢告诉别人,我的这本书能给你一个“编程黑带”,意思就是说,你已经打好了基础,可以真正开始学习编程了。! X1 @, j a [9 z C) p; L# O9 B
如果你肯努力,并投入一些时间,学会了这些技能,你将学会如何编写代码。
9 f" R" m0 A% k, j 致谢/ t ~1 ]4 c7 @: S
首先我要感谢在本书前两版中帮过我的Angela,没有她的话我有可能就不会费工夫完成这两本书了。她帮我修订了第1版草稿,而且在我写书的过程中给了我极大的支持。 Z" B3 x" D( O
我还要感谢Greg Newman为前两版提供的封面设计,Brian Shumate在早期网站设计方面的帮助,以及所有读过前两版并且提出反馈和纠错的读者。! g" C" [4 Z" H5 J: ~' R& A
谢谢你们。
* L( s: N1 M& }& I- z 笨办法更简单
) U. H! U* v2 u: t/ N5 e 在这本书的帮助下,你将通过完成下面这些非常简单的事情来学会一门编程语言,这也是每个程序员的必经之路。2 t) O9 [2 ^1 Q1 w$ k4 |9 J
1.从头到尾完成每一个习题。
1 H% H, N0 E; M h' N 2.一字不差地录入每一段程序。; @$ k# u* _- t. b2 O8 [7 Q
3.让程序运行起来。$ B+ t. P S7 s9 a
就是这样了。刚开始这对你来说会非常难,但你需要坚持下去。如果你通读了这本书,每晚花一两个小时做做习题,你可以为自己读下一本编程书籍打下良好的基础。通过这本书,你学到的可能不是真正的“编程”技术,但你会学到学习一门编程语言的基本技能。
: F+ m. \2 O2 P3 f. Z: o 这本书的目的是教会你编程新手所需的三种最重要的技能:读和写、注重细节以及发现不同。+ y& j+ }8 {( O& d: r
读和写
" {# [% x+ Y/ S' A ^ 很显然,如果你连打字都成问题的话,那你学习编程也会成问题。尤其是,如果你连程序源代码中的那些奇怪字符都打不出来的话,就更别提编程了。如果没有这些基本技能,你将连最基本的软件工作原理都难以学会。
2 X4 B% s& D$ p 手动录入代码范例并让它们运行起来的过程,会让你学会各种符号的名称,熟悉它们的用处,最终读懂编程语言。
4 `: O t0 G3 ~4 d7 a5 A. g+ g5 m 注重细节
! C) o; a* N: d: l1 v' T 区分好程序员和差程序员的最重要的一个方面就是对于细节的重视程度。事实上这是任何行业区分好坏的标准。如果缺乏对于工作中每一个微小细节的注意,你的工作成果将不可避免地出现各种关键缺陷。从编程这一行来讲,你得到的结果将会是毛病多多而且难以使用的软件。
! ~8 Y4 X* _, w6 T* `7 ]. n1 V+ b 通读这本书并一字不差地录入书中的每个例子,会训练你把精力集中到作品的细节上。
$ X$ I. {' m2 A& b, K1 T# q* _ 发现不同
5 Z! B6 ?) q0 m3 y4 m! v2 y; H! _' i 程序员长年累月的工作会培养出一种重要的技能,那就是观察事物间不同点的能力。有经验的程序员拿着两份仅有细微不同的程序,可以立即指出里边的不同点来。程序员甚至制造出工具来让这件事更加容易,不过我们不会用到这些工具。你要先用笨办法训练自己,然后才可以使用这些工具。8 C2 Q4 o5 d4 ?1 Q( \
在做这些习题并且录入代码的时候,你一定会写错东西,这是不可避免的,即使有经验的程序员也会偶尔出错。你的任务是把自己写的东西和正确答案对比,把所有的不同点都修正过来。这样的过程可以让你对程序里的错误和bug更加敏感。
' ?1 Q$ ?8 G( w- R 不要复制粘贴
# {4 X2 K- j6 X. Z. J, |4 U5 M 你必须手动将每个习题录进去。复制粘贴会让这些习题变得毫无意义。这些习题的目的是训练你的双手和大脑思维,让你有能力读代码、写代码、观察代码。如果你复制粘贴的话,就是在欺骗自己,而且这些习题的效果也会大打折扣。( O6 G. y5 T) k: d
关于坚持练习的一点提示5 J: n% i0 t) l, o6 W# E6 v1 C9 ]
你通过这本书学习编程时,我正在学习弹吉他。我每天至少训练2小时,至少花1小时练习音阶、和弦、琶音,剩下的时间用来学习音乐理论和乐曲演奏、训练听力等。有时我一天会花8小时来学习吉他和音乐,因为我觉得这是一件有趣的事情。对我来说,要学习一样东西,最自然、最根本的方法就是去反复地练习。我知道,要学好一种技能,每日的练习是必不可少的,就算哪天的练习没啥进展(对我来说是常事),或者说学习内容实在太难,你也不必介意。只要坚持尝试,总有一天困难会变得容易,枯燥也会变得有趣。
T6 D! o! g- ?3 ^. B2 Y& | 通过这本书学习编程的过程中要记住一点,就是所谓的“万事开头难”,对于有价值的事情尤其如此。也许你是一个害怕失败的人,一遇到困难就想放弃;也许你是一直没学会自律,一遇到“无聊”的事情就不想上手;也许因为有人夸你“有天分”而让你自视甚高,不愿意做这些看上去很笨拙的事情,怕有负你“神童”的称号;也许你太过激进,把自己跟像我这样有20多年经验的编程老手相比,让自己失去了信心。
) n7 b" Z3 \5 E3 | 不管是什么原因,你一定要坚持下去。如果遇到做不出来的附加练习,或者遇到一个看不懂的习题,你可以暂时跳过去,过一阵子回来再看。编程中有一件经常发生的怪事就是,一开始你什么都不懂,这会让你感觉很不舒服,就像学习人类的自然语言一样,你会发现很难记住一些词语和特殊符号的用法,而且会经常感到很迷茫,直到有一天,忽然一下子你会觉得豁然开朗,以前不明白的东西忽然就明白了。如果你坚持完成并努力理解这些习题,你最终会学会这些东西的。也许你不会成为一位编程大师,但你至少会明白编程的原理。9 U O% _) \8 h$ @- \0 B* w
如果你放弃的话,你会失去达到这个程度的机会。如果你坚持尝试,坚持录习题,坚持弄懂习题的话,你最终一定会明白里边的内容的。& d+ p m0 l4 ^& R" r8 I& m0 I
如果你通读了这本书,却还是不懂怎样写代码,你的努力也不会白费。你可以说你已经尽力了,虽然成效不佳,至少你尝试过了。这也是一件值得骄傲的事情。( @0 ^6 T' l* u( }, b1 r
给“小聪明”们的警告
. z, F& {* m# S8 o 有些学过编程的人读到这本书可能会有一种被贬低的感觉。其实本书中没有任何要居高临下地贬低任何人的意思,只不过我比我面向的读者群知道的更多而已。如果你觉得自己比我聪明,觉得我在居高临下,那我也没办法,因为你根本就不是我的目标读者。& y6 i2 r$ ^& V1 j* v# {
如果你觉得这本书里到处都在贬低你的智商,那我对你有以下三个建议。
$ K5 B7 k6 P6 c8 f8 a 1.别读这本书了。我这本书不是写给你的,而是写给那些不是什么都懂的人看的。
$ W% t* j; Z4 _/ I 2.放下架子好好学。如果你认为你什么都懂,那就很难从比自己强的人身上学到什么了。% `- y: y2 V/ Q' ?1 m; u; `" D! r$ q" f
3.学Lisp去。我听说什么都懂的人特喜欢Lisp。
3 w. c6 d: h, e7 `- q 对于其他抱着学习的目的而来的人,你们读的时候就想着我在微笑就可以了,而且我的眼睛里还带点儿恶作剧的闪光。1 G) Z0 k* ~; ^7 |4 v. r
精彩书摘; X5 m, f. b7 @
习题0 准备工作
% e+ m$ Z+ O9 g0 k7 [ 这个习题并没有代码内容,它的主要目的是让你在计算机上安装好 Python。你应该尽量照着说明进行操作,例如,Mac OSX 默认已经安装了 Python 2,所以就不要在上面安装Python 3或者别的Python版本了。- c- m; G+ \, t* w4 v" s
注意 如果你不知道怎样使用Windows下的PowerShell,或者OSX下的Terminal(终端),或者 Linux 下的 Bash,那你就需要先学会一个。我把我写的一本《命令行快速入门》简化了一下放到了本书的附录里,读完那部分后,再回来继续下面的步骤。
4 ` z! {0 p) l0 ?0 z! A Mac OSX, d' T) d! A+ X0 }7 R* r
完成这个习题你需要完成下列任务。
h% X2 y9 N* t" y* b8 V: ^0 B 1.用浏览器打开http://www.barebones.com/products/textwrangler/找到并安装TextWrangler文本编辑器。5 c7 N. v' s5 b6 ]# y% d9 T
2.把TextWrangler(也就是你的编辑器)放到Dock中,以方便日后使用。; H2 n" l) L! `+ L3 W7 W9 ]0 z
3.找到系统中的Terminal程序。到处找找,你会找到的。4 T& V( d m# u) U9 \6 _) S, M0 f
4.把Terminal也放到Dock里面。9 o4 m" @$ t7 D% t# _3 u
5.运行Terminal程序,这个程序没什么好看的。- i' m* y O* w) Q) B- B: T" F
6.在Terminal里运行python。运行的方法是输入程序的名字再敲一下回车键。
$ J4 a9 Y/ |" _: ]) [& ~ 7.按Ctrl+D(^D)退出python。& g* E0 N" f* y3 i1 K$ n
8.这样你就应该退回到敲python前的提示界面了。如果没有的话,自己研究一下为什么。
5 V! W, h- O7 @: q 9.学着在Terminal上创建一个目录。
. L2 Z& i2 i( f; b& C' P 10.学着在Terminal上变到一个目录。
- l) f: y* p- Q8 B( s 11.使用你的编辑器在你进入的目录下建立一个文件。建立一个文件,使用“保存”(Save)或者“另存为”(Save As……)选项,然后选择这个目录。
+ u4 {) g4 w9 B% f. S% J9 K9 e 12.使用键盘切换回到Terminal窗口。
( W8 q$ y! Q9 a: ?2 m5 f* ]: I1 _ z 13.回到Terminal,看看你能不能使用命令看到你新建的文件,上网搜索如何将文件夹中的内容列出来。0 [6 v; o) Y/ X+ y1 s
OSX:应该看到的结果" f- m- g/ N+ o
下面是我在自己电脑的Terminal中完成上述步骤时看到的内容,和你做的结果会有一些不同,看看你能不能找出两者的不同点。
K* h$ z( ~3 F! B& p; Y0 [1 k Last login:Sat Apr 24 00:56:54 on ttys001~ $ python
/ {; k q. E! {1 x& M& K5 O Python 2.5.1 (r251:54863,Feb 6 2009,19:02:12)[GCC 4.0.1 (Apple Inc.build 5465)]on darwinType "help","copyright","credits" or "license" for more information.& U [6 ^% ~4 K+ U# S
>>> ^D
' O8 D2 F6 P8 }$ h3 I7 n ~ $ mkdir mystuff
4 p C0 T) X2 q1 Z( s6 o) n ~ $ cd mystuff
( \9 K( D4 A9 V" J* ] mystuff $ ls
3 K8 |% L) E+ `- H" z # ……使用TextWrangler编辑test.txt ……- ^0 p5 B S, m) k: X1 F
mystuff $ ls
3 q+ `$ ^6 c/ R1 P1 ` test.txt* Q1 I, r. S% `: E* k+ e
mystuff $
$ v- e! k$ Q F+ G Windows
* ]: e' w# Z) y: P 1.用浏览器打开 http://notepad-plus-plus.org 下载并安装 Notepad++文本编辑器。这个操作无需管理员权限。' w( F+ [3 h. P
2.把Notepad++放到桌面或者快速启动栏,这样就可以方便地访问该程序了。这两条在安装选项中可以看到。
7 t4 i2 v( F- A 3.从开始菜单运行PowerShell程序。你可以使用开始菜单的搜索功能,输入名称后敲回车键即可运行。! p; |0 W" o3 ^3 d
4.为它创建一个快捷方式,放到桌面或者快速启动栏中以方便使用。) N/ R+ w/ @. H
5.运行终端程序(也就是PowerShell),这个程序没什么好看的。
) \. |: |) t: S! e4 h7 S8 X 6.在终端程序中运行python。运行的方法是输入程序的名字再敲一下回车键。
# W D+ z+ F, i2 f. r: k0 ] a.如果运行python发现它不存在(python is not recognized),你需要访问http://python.org/download下载并且安装Python。% C( _2 F+ U1 u" N& s K9 ^1 f# I
游客,本下载内容需要支付 1共享币,购买后显示下载链接立即支付
" y7 C w; k* D5 Y- f
: y- {- r1 R( |/ D0 W( Z/ W C |