“笨办法”学Python(第3版)(txt+pdf+epub+mobi电子书下载)


发布时间:2020-06-28 21:30:41

点击下载

作者:[美]Zed A. Shaw著

出版社:信息技术第一出版分社

格式: AZW3, DOCX, EPUB, MOBI, PDF, TXT

“笨办法”学Python(第3版)

“笨办法”学Python(第3版)试读:

前言

这本书的目的是让你起步编程。虽然书名说是用“Hard Way”(笨办法)学习写程序,但其实并非如此。所谓的“笨办法”指的是本书的教学方式,也就是所谓的“指令式”教学。在这个过程中,我会让你完成一系列习题,而你则通过重复练习来学到技能,这些习题也是专为重复练习而设计的。对于一无所知的初学者来说,在能理解更复杂的话题之前,这种教授方式效果是很好的。你可以在各种场合看到这种教授方式,从武术到音乐不一而足,甚至在学习基本的算术和阅读技能时也会看到这种教学方式。

这本书通过练习和记忆的方式,教你逐渐掌握Python的技能,然后由浅入深,让你将这些技能应用到各种问题上。读完本书以后,你将有能力接触更为复杂的编程主题。我喜欢告诉别人,我的这本书能给你一个“编程黑带”,意思就是说,你已经打好了基础,可以真正开始学习编程了。

如果你肯努力,并投入一些时间,学会了这些技能,你将学会如何编写代码。

致谢

首先我要感谢在本书前两版中帮过我的Angela,没有她的话我有可能就不会费工夫完成这两本书了。她帮我修订了第1版草稿,而且在我写书的过程中给了我极大的支持。

我还要感谢Greg Newman为前两版提供的封面设计,Brian Shumate在早期网站设计方面的帮助,以及所有读过前两版并且提出反馈和纠错的读者。

谢谢你们。

笨办法更简单

在这本书的帮助下,你将通过完成下面这些非常简单的事情来学会一门编程语言,这也是每个程序员的必经之路。

1.从头到尾完成每一个习题。

2.一字不差地录入每一段程序。

3.让程序运行起来。

就是这样了。刚开始这对你来说会非常难,但你需要坚持下去。如果你通读了这本书,每晚花一两个小时做做习题,你可以为自己读下一本编程书籍打下良好的基础。通过这本书,你学到的可能不是真正的“编程”技术,但你会学到学习一门编程语言的基本技能。

这本书的目的是教会你编程新手所需的三种最重要的技能:读和写、注重细节以及发现不同。

读和写

很显然,如果你连打字都成问题的话,那你学习编程也会成问题。尤其是,如果你连程序源代码中的那些奇怪字符都打不出来的话,就更别提编程了。如果没有这些基本技能,你将连最基本的软件工作原理都难以学会。

手动录入代码范例并让它们运行起来的过程,会让你学会各种符号的名称,熟悉它们的用处,最终读懂编程语言。

注重细节

区分好程序员和差程序员的最重要的一个方面就是对于细节的重视程度。事实上这是任何行业区分好坏的标准。如果缺乏对于工作中每一个微小细节的注意,你的工作成果将不可避免地出现各种关键缺陷。从编程这一行来讲,你得到的结果将会是毛病多多而且难以使用的软件。

通读这本书并一字不差地录入书中的每个例子,会训练你把精力集中到作品的细节上。

发现不同

程序员长年累月的工作会培养出一种重要的技能,那就是观察事物间不同点的能力。有经验的程序员拿着两份仅有细微不同的程序,可以立即指出里边的不同点来。程序员甚至制造出工具来让这件事更加容易,不过我们不会用到这些工具。你要先用笨办法训练自己,然后才可以使用这些工具。

在做这些习题并且录入代码的时候,你一定会写错东西,这是不可避免的,即使有经验的程序员也会偶尔出错。你的任务是把自己写的东西和正确答案对比,把所有的不同点都修正过来。这样的过程可以让你对程序里的错误和bug更加敏感。

不要复制粘贴

你必须手动将每个习题录进去。复制粘贴会让这些习题变得毫无意义。这些习题的目的是训练你的双手和大脑思维,让你有能力读代码、写代码、观察代码。如果你复制粘贴的话,就是在欺骗自己,而且这些习题的效果也会大打折扣。

关于坚持练习的一点提示

你通过这本书学习编程时,我正在学习弹吉他。我每天至少训练2小时,至少花1小时练习音阶、和弦、琶音,剩下的时间用来学习音乐理论和乐曲演奏、训练听力等。有时我一天会花8小时来学习吉他和音乐,因为我觉得这是一件有趣的事情。对我来说,要学习一样东西,最自然、最根本的方法就是去反复地练习。我知道,要学好一种技能,每日的练习是必不可少的,就算哪天的练习没啥进展(对我来说是常事),或者说学习内容实在太难,你也不必介意。只要坚持尝试,总有一天困难会变得容易,枯燥也会变得有趣。

通过这本书学习编程的过程中要记住一点,就是所谓的“万事开头难”,对于有价值的事情尤其如此。也许你是一个害怕失败的人,一遇到困难就想放弃;也许你是一直没学会自律,一遇到“无聊”的事情就不想上手;也许因为有人夸你“有天分”而让你自视甚高,不愿意做这些看上去很笨拙的事情,怕有负你“神童”的称号;也许你太过激进,把自己跟像我这样有20多年经验的编程老手相比,让自己失去了信心。

不管是什么原因,你一定要坚持下去。如果遇到做不出来的附加练习,或者遇到一个看不懂的习题,你可以暂时跳过去,过一阵子回来再看。编程中有一件经常发生的怪事就是,一开始你什么都不懂,这会让你感觉很不舒服,就像学习人类的自然语言一样,你会发现很难记住一些词语和特殊符号的用法,而且会经常感到很迷茫,直到有一天,忽然一下子你会觉得豁然开朗,以前不明白的东西忽然就明白了。如果你坚持完成并努力理解这些习题,你最终会学会这些东西的。也许你不会成为一位编程大师,但你至少会明白编程的原理。

如果你放弃的话,你会失去达到这个程度的机会。如果你坚持尝试,坚持录习题,坚持弄懂习题的话,你最终一定会明白里边的内容的。

如果你通读了这本书,却还是不懂怎样写代码,你的努力也不会白费。你可以说你已经尽力了,虽然成效不佳,至少你尝试过了。这也是一件值得骄傲的事情。

给“小聪明”们的警告

有些学过编程的人读到这本书可能会有一种被贬低的感觉。其实本书中没有任何要居高临下地贬低任何人的意思,只不过我比我面向的读者群知道的更多而已。如果你觉得自己比我聪明,觉得我在居高临下,那我也没办法,因为你根本就不是我的目标读者。

如果你觉得这本书里到处都在贬低你的智商,那我对你有以下三个建议。

1.别读这本书了。我这本书不是写给你的,而是写给那些不是什么都懂的人看的。

2.放下架子好好学。如果你认为你什么都懂,那就很难从比自己强的人身上学到什么了。

3.学Lisp去。我听说什么都懂的人特喜欢Lisp。

对于其他抱着学习的目的而来的人,你们读的时候就想着我在微笑就可以了,而且我的眼睛里还带点儿恶作剧的闪光。习题0 准备工作

这个习题并没有代码内容,它的主要目的是让你在计算机上安装好 Python。你应该尽量照着说明进行操作,例如,Mac OSX 默认已经安装了 Python 2,所以就不要在上面安装Python 3或者别的Python版本了。

注意 如果你不知道怎样使用Windows下的PowerShell,或者OSX下的Terminal(终端),或者 Linux 下的 Bash,那你就需要先学会一个。我把我写的一本《命令行快速入门》简化了一下放到了本书的附录里,读完那部分后,再回来继续下面的步骤。Mac OSX

完成这个习题你需要完成下列任务。

1.用浏览器打开http://www.barebones.com/products/textwrangler/找到并安装TextWrangler文本编辑器。

2.把TextWrangler(也就是你的编辑器)放到Dock中,以方便日后使用。

3.找到系统中的Terminal程序。到处找找,你会找到的。

4.把Terminal也放到Dock里面。

5.运行Terminal程序,这个程序没什么好看的。

6.在Terminal里运行python。运行的方法是输入程序的名字再敲一下回车键。

7.按Ctrl+D(^D)退出python。

8.这样你就应该退回到敲python前的提示界面了。如果没有的话,自己研究一下为什么。

9.学着在Terminal上创建一个目录。

10.学着在Terminal上变到一个目录。

11.使用你的编辑器在你进入的目录下建立一个文件。建立一个文件,使用“保存”(Save)或者“另存为”(Save As...)选项,然后选择这个目录。

12.使用键盘切换回到Terminal窗口。

13.回到Terminal,看看你能不能使用命令看到你新建的文件,上网搜索如何将文件夹中的内容列出来。OSX:应该看到的结果

下面是我在自己电脑的Terminal中完成上述步骤时看到的内容,和你做的结果会有一些不同,看看你能不能找出两者的不同点。

Last login: Sat Apr 24 00:56:54 on ttys001

~ $ python

Python 2.5.1 (r251:54863, Feb 6 2009, 19:02:12)

[GCC 4.0.1 (Apple Inc.build 5465)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> ^D

~ $ mkdir mystuff

~ $ cd mystuff

mystuff $ ls

# ...使用TextWrangler编辑test.txt ...

mystuff $ ls

test.txt

mystuff $Windows

1.用浏览器打开 http://notepad-plus-plus.org 下载并安装 Notepad++文本编辑器。这个操作无需管理员权限。

2.把Notepad++放到桌面或者快速启动栏,这样就可以方便地访问该程序了。这两条在安装选项中可以看到。

3.从开始菜单运行PowerShell程序。你可以使用开始菜单的搜索功能,输入名称后敲回车键即可运行。

4.为它创建一个快捷方式,放到桌面或者快速启动栏中以方便使用。

5.运行终端程序(也就是PowerShell),这个程序没什么好看的。

6.在终端程序中运行python。运行的方法是输入程序的名字再敲一下回车键。

a.如果运行python发现它不存在(python is not recognized),你需要访问http://python.org/download下载并且安装Python。

b.确认你要安装的是Python 2而不是Python 3。

c.你也可以试试ActiveState Python,尤其是没有管理员权限的时候。

d.如果安装好了,但是python还是不能被识别,那你需要在PowerShell下输入并执行以下命令:

[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27", "User")

e.关闭并重启PowerShell,确认python现在可以运行。如果不行的话,可能需要重启电脑。

7.按Ctrl+Z(^Z)退出python。

8.这样你就应该退回到敲python前的提示界面了。如果没有的话,自己研究一下为什么。

9.学着在终端创建一个目录。

10.学着在终端上变到一个目录。

11.使用你的编辑器在你进入的目录下建立一个文件。建立一个文件,使用“保存”(Save)或者“另存为”(Save As...)选项,然后选择这个目录。

12.使用键盘切换回到终端窗口。

13.回到终端,看看你能不能使用命令看到你新建的文件。

注意 Windows下安装的Python可能默认没有正确配置路径。确认你在PowerShell下输入了[Environment]::SetEnvironmentVariable("Path", "$env:Path;C:\Python27","User")。你也许需要重启PowerShell或者计算机来让路径设置生效。Windows:应该看到的结果

> python

ActivePython 2.6.5.12 (ActiveState Software Inc.) based on

Python 2.6.5 (r265:79063, Mar 20 2010, 14:22:52) [MSC v.1500 32 bit (Intel)] on win32

Type "help", "copyright", "credits" or "license" for more information.

>>> ^Z

> mkdir mystuff

> cd mystuff

...使用Notepad++编辑mystuff目录下的test.txt...

>

<如果你没有使用管理员权限安装,你会看到一堆错误,忽略它们,按回车即可。>

> dir

Volume in drive C is

Volume Serial Number is 085C-7E02

Directory of C:\Documents and Settings\you\mystuff

04.05.2010 23:32  

     .

04.05.2010 23:32  

     ..

04.05.2010 23:32         6 test.txt

1 File(s)        6 bytes

2 Dir(s) 14 804 623 360 bytes free

>

你看到的命令行提示、Python信息及其他一些东西可能会非常不一样,这只是一个大致的情况罢了。Linux

Linux 系统可谓五花八门,安装软件的方式也各有不同。既然你是 Linux 用户,我就假设你已经知道如何安装软件包了,以下是操作说明。

1.使用你的Linux软件包管理器并安装gedit文本编辑器。

2.把gedit(也就是你的编辑器)放到窗口管理器显见的位置,以方便日后使用。

a.运行gedit,先改掉一些愚蠢的默认设定。

b.从gedit菜单中打开Preferences,选择Editor页面。

c.将Tab width:改为4。

d.选择(确认已勾选该选项)Insert spaces instead of tabs。

e.然后打开Automatic indentation选项。

f.转到View选项卡,打开Display line numbers选项。

3.找到Terminal程序。它的名字可能是GNOME Terminal、Konsole或者xterm,以下均以Terminal代称。

4.把Terminal也放到你的Dock里面。

5.运行Terminal程序,这个程序没什么好看的。

6.在Terminal程序中运行python。运行的方法是输入程序的名字再敲一下回车键。(如果运行python发现它不存在,你需要安装它,而且要确认你安装的是Python 2而非Python 3。)

7.按Ctrl+D(^D)退出python。

8.这样你就应该退回到敲python前的提示界面了。如果没有的话,自己研究一下为什么。

9.学着在Terminal上创建一个目录。

10.学着在Terminal上变到一个目录。

11.使用你的编辑器在你进入的目录下建立一个文件。建立一个文件,使用“保存”(Save)或者“另存为”(Save As...)选项,然后选择这个目录。

12.使用键盘切换回到Terminal窗口,如果不知道怎样使用键盘切换你可以自己查一下。

13.回到Terminal,看看你能不能使用命令列出你新建的文件。Linux:应该看到的结果

$ python

Python 2.6.5 (r265:79063, Apr 1 2010, 05:28:39)

[GCC 4.4.3 20100316 (prerelease)] on linux2

Type "help", "copyright", "credits" or "license" for more information.

>>>

$ mkdir mystuff

$ cd mystuff

# ...使用gedit编辑text.txt ...

$ ls

test.txt

$

你看到的命令行提示、Python信息及其他一些东西可能会非常不一样,这只是一个大致的情况罢了。给新手的告诫

你已经完成了这个习题。取决于对计算机的熟悉程度,这个习题对你而言可能会有些难。如果你觉得有难度的话,你要自己克服困难,多花点时间学习一下,因为如果你不会这些基础操作的话,编程对你来说将会更难学。

如果有程序员告诉你使用vim或者emacs,你就对他们说“不”。当你水平达到一定程度的时候,这些编辑器才适合你用。你现在需要的只是一个可以编辑文本的编辑器。我们使用gedit、TextWrangler、Notepad++是因为它们很简单,而且在不同的系统上面使用起来都是一样的。就连专业程序员也会使用这些文本编辑器,所以对你而言,用它们入门编程已经足够了。

也许有程序员会告诉你安装和学习Python 3。你应该告诉他们“等你电脑里的所有Python代码都是Python 3的了,我再试着学学吧。”你这句话足够他们忙活十来年了。

总有一天你会听到有程序员建议你使用Mac OSX或者Linux。如果他喜欢字体美观,他会告诉你弄台 Mac OSX 计算机,如果他们喜欢操作控制而且留了一脸大胡子,他会让你安装Linux。这里再次向你说明,只要是一台手上能用的计算机就可以了。你需要的只有三样东西:一个文本编辑器,一个命令行终端,还有Python。

最后要说的是,这个习题的准备工作的目的就是让你可以在以后的习题中顺利地做到下面几件事。

1.撰写习题的代码,在 Linux 下用 gedit,OSX 下用 TextWrangler,Windows 下用Notepad++。

2.运行你写的习题代码。

3.代码终端的时候修正错误的地方。

4.重复上述步骤。

其他的事情只会让你更困惑,所以还是坚持按计划进行吧。习题1 第一个程序

你应该在习题 0 上花了不少的时间,学会了如何安装文本编辑器,运行文本编辑器,以及如何运行终端。如果你还没有完成这些练习,请不要继续往下进行了,否则你不会觉得很好过的。写在习题开头警告你不要跳过前面内容的警示本书中仅此一次,切记切记。

将下面的内容写到一个文件中,取名为ex1.py。这种命名方式很重要,Python文件最好以.py结尾。

ex1.py

1  print "Hello World!"

2  print "Hello Again"

3  print "I like typing this."

4  print "This is fun."

5  print 'Yay! Printing.'

6  print "I'd much rather you 'not'."

7  print 'I "said" do not touch this.'

如果你使用的是Mac OSX下的TextWrangler,那你的文本编辑器大致是图1-1所示的这个样子。图1-1

如果你是在Windows下使用Notepad++,那你看到的应该是图1-2所示的这个样子。图1-2

别担心编辑器长得是不是一样,关键是以下几点。

1.注意我没有键入左边的行号。这些是额外加到书里边的,以便对代码具体的某一行进行讨论。例如“参见第5行……”你无需将这些也写进Python脚本中去。

2.注意截图中开始的print语句,它和代码范例中是完全一样的。这里要求你做到“完全相同”,仅做到“差不多相同”是不够的。要让这段脚本正常工作,代码中的每个字符都必须完全匹配。当然,你的编辑器显示的颜色可能不一样,这并不重要,只有你键入的字符才是重要的。

然后需要在终端通过输入以下内容来运行这段代码:

python ex1.py

如果你写对了,你应该看到和下面一样的内容。如果不一样,就是你哪儿弄错了。不是计算机出错了,计算机不会错。应该看到的结果

在Mac OSX的终端下面应该看到图1-3所示的这个样子。图1-3

在Windows的PowerShell下应该看到图1-4所示的这个样子。图1-4

你也许会看到python ex1.py前面显示的用户名、计算机名及其他一些信息不一样,这不是问题,重要的是你键入了命令,而且看到了相同的输出。

如果有错误,你会看到与下面类似的错误信息:

$ python ex/ex1.py

File "ex/ex1.py", line 3

print "I like typing this.

^

SyntaxError: EOL while scanning string literal

你应该学会看懂这些内容,这是很重要的一点,因为你以后还会犯类似的错误。就是现在的我也会犯这样的错误。让我们一行一行来看。

1.首先我们在终端输入命令来运行ex1.py脚本。

2.Python告诉我们ex1.py文件的第3行有一个错误。

3.然后这一行的内容被显示出来。

4.然后Python显示一个插入符(^)符号,用来指示出错的位置。注意到少了一个双引号(")了吗?

5.最后,它显示一个“语法错误”(SyntaxError),告诉你究竟是什么样的错误。通常这些错误信息都非常难懂,不过你可以把错误信息的内容复制到搜索引擎里,然后你就能看到别人也遇到过这样的错误,而且你也许能找到如何解决这个问题。

注意 如果你来自另外一个国家,而且你看到关于ASCII编码的错误,那就在你的Python脚本的最上面加入下面这一行:

# -*- coding: utf-8 -*-

这样你就在脚本中使用了Unicode UTF-8编码,这些错误就不会出现了。附加练习

每个习题都有附加练习要完成。附加练习里边的内容是供你尝试的。如果你觉得做不出来,可以暂时跳过,过段时间再回来做。

在这个习题中,试试下面几件事儿。

1.让你的脚本再多打印一行。

2.让你的脚本只打印一行。

3.在一行的起始位置放一个“#”字符。它的作用是什么?自己研究一下。

从现在开始,除非特别情况,我将不再解释每个习题的工作原理了。

注意 #(octothorpe)有很多的英文名字,如pound(英镑符)、hash(电话的#键)、mesh(网)等。选一个你觉得酷的用就行了。常见问题回答

这些是本书在线的时候收到的真实的学生问题,其中的一些问题你也有可能会遇到,所以我就把这些问题以及它们的答案都搜集在这里了。

我可不可以使用IDLE?

不行。你应该使用OSX的终端或者Windows的PowerShell,和我这里演示的一样。如果你不知道如何用它们,可以去阅读附录的“命令行快速入门”。

怎样让编辑器显示不同颜色?

编辑之前先将文件保存为.py格式,如ex1.py,后面编辑时你就可以看到各种颜色了。

运行ex1.py时看到SyntaxError: invalid syntax。

你也许已经运行了Python,然后又在Python环境下运行了一遍Python。关掉并重启终端,重来一遍,只键入python ex1.py就可以了。

遇到错误信息can’t open file 'ex1.py': [Errno 2] No such file or directory。

你需要在自己创建文件的目录下运行命令。确保你事先使用 cd 命令进入了这层目录下。假如你的文件存在 lpthw/ex1.py 下面,那你需要先执行 cd lpthw/再运行 python ex1.py,如果你不明白该命令的意思,那就去看看第一个问题中提到的“命令行快速入门”吧。

怎样在代码中输入我们国家的语言文字?

确认在文件开头加入了这行:# -*- coding: utf-8 -*-。

我的文件无法运行,它直接回到了提示符,没有任何输出。

很有可能是你把代码做了字面理解,认为print "Hello World!"就是让你在文件中打印"Hello World!",于是你没有输入 print。你的代码应该和我的一模一样。我的每行里边都有print,你的也要确保都有,这样代码才能正常运行。习题2 注释和#号

程序里的注释是很重要的。它们可以用自然语言告诉你某段代码的功能是什么。想要临时移除一段代码时,你还可以用注释的方式临时禁用这段代码。这个习题就是让你学会在Python中注释。

ex2.py

1  # A comment, this is so you can read your program later.

2  # Anything after the # is ignored by python.

3

4  print "I could have code like this." # and the comment after is ignored

5

6  # You can also use a comment to "disable" or comment out a piece of code:

7  # print "This won't run."

8

9  print "This will run."

从现在开始,我将用这样的方式来演示代码。我一直在强调“完全相同”,不过你也不必按照字面意思理解。你的程序在屏幕上的显示可能会有些不同,重要的是你在文本编辑器中输入的文本的正确性。事实上,我可以用任何编辑器写出这段程序,而且内容是完全一样的。应该看到的结果

习题2 会话

$ python ex2.py

I could have code like this.

This will run.

再说明一次,我不会再贴各种屏幕截图了。你应该明白上面的内容是输出内容的字面翻译,而$ python ...下面的内容才是你应该关心的。附加练习

1.弄清楚#字符的作用,而且记住它的名字(英文为octothorpe或者pound character)。

2.打开ex2.py文件,从后往前逐行检查。从最后一行开始,倒着逐个单词检查回去。

3.有没有发现什么错误呢?有的话就改正过来。

4.朗读你写的习题,把每个字符都读出来。有没有发现更多的错误呢?有的话也一样改正过来。常见问题回答

你确定#字符的名称是pound character?

我叫它 octothorpe,这个名字没有哪个国家用作别的意思,而且所有的人都能看懂它的意思。每个国家都觉得他们的叫法最正确、最闪亮。对我来说这是自大狂的想法,而且说真的,与其去关心这种细枝末节,还不如把时间花在更重要的事情上面,比如好好学习编程。

如果#是注释的意思,那么为什么# -*- coding: utf-8 -*-能起作用呢?

Python其实还是没把这行当做代码处理,这种用法只是让字符编码格式被识别的一个取巧的方案,或者说是一个没办法的办法吧。在编辑器设置里你还能看到一种类似的注释。

为什么print "Hi # there."里的#没被忽略掉?

这行代码里的#处于字符串内部,所以它就是引号结束前的字符串中的一部分,这时它只是一个普通字符,而不代表注释的意思。

怎样做多行注释?

每行前面放一个#就可以了。

我们国家的键盘上找不到#字符,怎么办?

有的国家要通过Alt键组合才能输入这个字符。你可以用搜索引擎找一下解决方案。

为什么要让我倒着阅读代码?

这样可以避免让你的大脑跟着每一段代码内容的意思走,这样可以让你精确处理每个片段,从而让你更容易发现代码中的错误。这是一个很好使的查错技巧。习题3 数字和数学计算

每一种编程语言都包含处理数字和进行数学计算的方法。不必担心,程序员经常谎称他们是多么牛的数学天才,其实他们根本不是。如果他们真是数学天才,他们早就去从事数学相关的行业了,而不是写写广告程序和社交网络游戏,偷偷赚点小钱而已。

这个习题里有很多数学运算符号。我们来看一遍它们都叫什么名字。你要一边写一边念出它们的名字来,直到你念烦了为止。名字如下:

+ 加号

− 减号

/ 斜杠

* 星号

% 百分号

< 小于号

> 大于号

<= 小于等于号

>= 大于等于号

有没有注意到以上只是些符号,没有给出具体的运算操作呢?写完下面的练习代码后,再回到上面的列表,写出每个符号的作用。例如,+是用来做加法运算的。

ex3.py

1  print "I will now count my chickens:"

2

3  print "Hens", 25 + 30 / 6

4  print "Roosters", 100 - 25 * 3 % 4

5

6  print "Now I will count the eggs:"

7

8  print 3 + 2 + 1 - 5 + 4 % 2 - 1 / 4 + 6

9

10 print "Is it true that 3 + 2 < 5 - 7?"

11

12 print 3 + 2 < 5 – 7

13

14 print "What is 3 + 2?", 3 + 2

15 print "What is 5 - 7?", 5 – 7

16

17 print "Oh, that's why it's False."

18

19 print "How about some more."

20

21 print "Is it greater?", 5 > -2

22 print "Is it greater or equal?", 5 >= -2

23 print "Is it less or equal?", 5 <= -2应该看到的结果

习题3 会话

$ python ex3.py

I will now count my chickens:

Hens 30

Roosters 97

Now I will count the eggs:

7

Is it true that 3 + 2 < 5 - 7?

False

What is 3 + 2? 5

What is 5 - 7? -2

Oh, that's why it's False.

How about some more.

Is it greater? True

Is it greater or equal? True

Is it less or equal? False附加练习

1.每一行的上面使用#为自己写一个注释,说明一下这一行的作用。

2.记得习题0吧?用里边的方法运行Python,然后使用刚才学到的运算符号,把Python当做计算器玩玩。

3.自己找个想要计算的东西,写一个.py文件把它计算出来。

4.有没有发现计算结果是“错”的呢?计算结果只有整数,没有小数部分。研究一下这是为什么,搜索一下“浮点数”(floating point number)是什么东西。

5.使用浮点数重写一遍ex3.py,让它的计算结果更准确。(提示:20.0是一个浮点数。)常见问题回答

为什么%是求余数符号,而不是百分号?

很大程度上只是因为设计人员选择了这个符号而已。正常写作时它是百分号没错,在编程中除法我们用了/,而求余数又恰恰选择了%这个符号,仅此而已。

%是怎么工作的?

换个说法就是“X除以Y还剩余J”,例如“100除以16还剩4”。%运算的结果就是J这部分。

运算优先级是怎样的?

在美国,我们用 PEMDAS 这个简称来辅助记忆,它的意思是“括号(Parentheses)、指数(Exponents)、乘(Multiplication)、除(Division)、加(Addition)、减(Subtraction)”,这也是Python里的运算优先级。

为什么/(除法)算出来的比实际小?

其实不是没算对,而是它将小数部分丢弃了,试试7.0 / 4.0和7 / 4比较一下,你就看出不同了。习题4 变量和命名

你已经学会了print和算术运算。下一步要学的是“变量”(variable)。在编程中,变量只不过是用来指代某个东西的名字。程序员通过使用变量名可以让他们的程序读起来更像自然语言。而且因为程序员的记性都不怎么好,变量名可以让他们更容易记住程序的内容。如果他们没有在写程序时使用好的变量名,在下一次读到原来写的代码时他们会大为头疼的。

如果被这个习题难住了的话,想想之前教过的,要注意找到不同点、关注细节。

1.在每一行的上面写一行注释,给自己解释一下这一行的作用。

2.倒着读你的.py文件。

3.朗读你的.py文件,将每个字符也朗读出来。

ex4.py

1  cars = 100

2  space_in_a_car = 4.0

3  drivers = 30

4  passengers = 90

5  cars_not_driven = cars - drivers

6  cars_driven = drivers

7  carpool_capacity = cars_driven * space_in_a_car

8  average_passengers_per_car = passengers / cars_driven

9

10

11 print "There are", cars, "cars available."

12 print "There are only", drivers, "drivers available."

13 print "There will be", cars_not_driven, "empty cars today."

14 print "We can transport", carpool_capacity, "people today."

15 print "We have", passengers, "to carpool today."

16 print "We need to put about", average_passengers_per_car, "in each car."

注意 space_in_a_car中的_是下划线(underscore)字符。如果你不知道怎样输入这个字符的话就自己研究一下。这个字符在变量里通常被用作假想的空格,用来隔开单词。应该看到的结果

习题4 会话

$ python ex4.py

There are 100 cars available.

There are only 30 drivers available.

There will be 70 empty cars today.

We can transport 120.0 people today.

We have 90 to carpool today.

We need to put about 3 in each car.附加练习

当我刚开始写这个程序时我犯了个错误,Python告诉我这样的错误信息:

Traceback (most recent call last):

File "ex4.py", line 8, in

average_passengers_per_car = car_pool_capacity / passenger

NameError: name 'car_pool_capacity' is not defined

用你自己的话解释一下这个错误信息,解释时记得使用行号,而且要说明原因。

下面是更多的附加练习。

1.我在程序里用了4.0作为 space_in_a_car 的值,这样做有必要吗?如果只用4会有什么问题?

2.记住4.0是一个“浮点数”,自己研究一下这是什么意思。

3.在每一个变量赋值的上一行加上一行注释。

4.记住=的名字是等于,它的作用是为东西取名。

5.记住_是下划线字符。

6.将Python作为计算器运行起来,就跟以前一样,不过这一次在计算过程中使用变量名来做计算,常见的变量名有i、x、j等。常见问题回答

=(单等号)和==(双等号)有什么不同?

=的作用是将右边的值赋给左边的变量名。==的作用是检查左右两边是否相等。习题27中你会学到==的用法。

写成x=100而非x = 100也没关系吧?

是可以这样写,但这种写法不好。操作符两边加上空格会让代码更容易阅读。

词语间的空格有没有办法不让print打印出来?

你可以通过这样的方法实现:print "Hey %s there." % "you",后面马上就会讲到。

怎样倒着读代码?

很简单,假如说你的代码有16行,你就从第16行开始,和我的第16行比对,接着比对第15行,依此类推,直到全部检查完。

为什么space用了4.0?

这个主要就是为了让你见识一下浮点数,并且提出这个问题。看看附加练习吧。习题5 更多的变量和打印

我们现在要键入更多的变量并且把它们打印出来。这次我们将使用一个叫“格式化字符串”(format string)的东西。每一次你使用双引号(")把一些文本引用起来,就创建了一个字符串。字符串是程序向人展示息的方式。你可以打印(显示)它们,可以将它们写入文件,还可以将它们发送给网站服务器,很多事情都是通过字符串交流实现的。

字符串是非常好用的东西,所以在这个习题中你将学会如何创建包含变量内容的字符串。使用专门的格式和语法把变量的内容放到字符串里,相当于来告诉Python:“嘿,这是一个格式化字符串,把这些变量放到那几个位置。”

一样的,即使你读不懂这些内容,只要一字不差地键入就可以了。

ex5.py

1  my_name = 'Zed A.Shaw'

2  my_age = 35 # not a lie

3  my_height = 74 # inches

4  my_weight = 180 # lbs

5  my_eyes = 'Blue'

6  my_teeth = 'White'

7  my_hair = 'Brown'

8

9  print "Let's talk about %s." % my_name

10 print "He's %d inches tall." % my_height

11 print "He's %d pounds heavy." % my_weight

12 print "Actually that's not too heavy."

13 print "He's got %s eyes and %s hair." % (my_eyes, my_hair)

14 print "His teeth are usually %s depending on the coffee." % my_teeth

15

16 # this line is tricky, try to get it exactly right

17 print "If I add %d, %d, and %d I get %d." % (

18   my_age, my_height, my_weight, my_age + my_height + my_weight)

警告 如果你使用了非ASCII字符而且遇到了编码错误,记得在最顶端加上# -*- coding:utf-8 -*-。应该看到的结果

习题5 会话

$ python ex5.py

Let's talk about Zed A.Shaw.

He's 74 inches tall.

He's 180 pounds heavy.

Actually that's not too heavy.

He's got Blue eyes and Brown hair.

His teeth are usually White depending on the coffee.

If I add 35, 74, and 180 I get 289.附加练习

1.修改所有的变量名字,把它们前面的my_去掉。确认将每一个地方都改掉,不只是使用=赋值过的地方。

2.试着使用更多的格式化字符。例如,%r就是非常有用的一个,它的含义是:“不管什么都打印出来。”

3.在网上搜索所有的Python格式化字符。

4.试着使用变量将英寸和磅转换成厘米和千克。不要直接键入答案。使用Python的数学计算功能来完成。常见问题回答

这样定义变量行不行:1 = 'Zed Shaw'?

不行。1不是一个有效的变量名称。变量名要以字母开头,所以a1可以,但1不行。

%s、%r和%d是做什么的?

后面你会学到更多,现在可以告诉你的是,它们是一种“格式控制工具”。它们告诉Python把右边的变量带到字符串中,并且把变量的值放到%s所在的位置上。

还是不懂,“格式控制工具”到底是什么?

教你学编程的一个问题就是,你需要先学会编程,才能读懂我的一些描述。我解决这个问题的方法是让你先去做一些事情,后面我再解释。当你碰到类似的问题时,把它们记录下来,看我是不是会在后面解释它们。

如何将浮点数四舍五入?

你可以使用round()函数,如round(1.7333)。

我遇到了错误TypeError: 'str' object is not callable。

很有可能你是漏写了字符串和变量之间的%。

为什么我还是不明白?

试着将脚本里的数字看成是你自己测量出来的数据,这样会很奇怪,但是多少会让你有身临其境的感觉,从而帮助你理解一些东西。习题6 字符串和文本

虽然你已经在程序中写过字符串了,但是你还不了解它们的用处。在这个习题中我们将使用复杂的字符串来建立一系列变量,从中你将学到它们的用途。首先,我们解释一下字符串是什么。

字符串通常是指你想要展示给别人的或者是想要从程序里“导出”的一小段字符。Python可以通过文本里的双引号(")或者单引号(')识别出字符串来。这在以前的打印练习中你已经见过很多次了。如果你把单引号或者双引号括起来的文本放到 print 后面,它们就会被Python打印出来。

字符串可以包含之前已经见过的格式化字符。你只要将格式化的变量放到字符串中,紧跟着一个百分号%,再紧跟着变量名即可。唯一要注意的地方是,如果你想要在字符串中通过格式化字符放入多个变量,需要将变量放到圆括号(())中,而且变量之间用逗号(,)隔开。就像你逛商店说“我要买牛奶、鸡蛋、面包、清汤”一样,只不过程序员的语法是“(milk, eggs, bread, soup)”。

我们将键入大量的字符串、变量、格式化字符,并且将它们打印出来。我们还将练习使用简写的变量名。程序员喜欢使用恼人的难读的简写来节约打字时间,所以我们现在就提早学会这个,这样你就能读懂并且写出这些东西了。

ex6.py

1  x = "There are %d types of people." % 10

2  binary = "binary"

3  do_not = "don't"

4  y = "Those who know %s and those who %s." % (binary, do_not)

5

6  print x

7  print y

8

9  print "I said: %r." % x

10 print "I also said: '%s'." % y

11

12 hilarious = False

13 joke_evaluation = "Isn't that joke so funny?! %r"

14

15 print joke_evaluation % hilarious

16

17 w = "This is the left side of..."

18 e = "a string with a right side."

19

20 print w + e应该看到的结果

习题6 会话

$ python ex6.py

There are 10 types of people.

Those who know binary and those who don't.

I said: 'There are 10 types of people.'.

I also said: 'Those who know binary and those who don't.'.

Isn't that joke so funny?! False

This is the left side of...a string with a right side.附加练习

1.通读这段程序,在每一行的上面写一行注释,给自己解释一下这一行的作用。

2.找到所有“把一个字符串放进另一个字符串”的位置。总共有4个地方。

3.你确定只有4个位置吗?你怎么知道的?没准儿我骗你呢。

4.解释一下为什么w和e用+连起来就可以生成一个更长的字符串。常见问题回答

%r和%s有什么不同?

%r用来做调试(debug)比较好,因为它会显示变量的原始数据(raw data),而%s和其他的符号则是用来向用户显示输出的。

既然有%r了,为什么还要用%s和%d?

%r用来调试最好,而其他格式符则是用来向用户显示变量的。

如果你觉得很好笑,可不可以写一句hilarious = True?

可以。在习题27中你会学到关于布尔函数的更多知识。

为什么你在有些字符串上用单引号而在别的字符串上没有用?

很大程度上只是个风格问题,我的风格就是在双引号的字符串中使用单引号,比如代码的第10行就是这样做的。

我遇到了错误 TypeError: not all arguments converted during string formatting。

确定每一行代码都完全正确。发生这种错误是因为你的字符串里的%格式化字符数量比后面给的变量多,仔细检查一下哪里写错了。习题7 更多打印

现在我们将做一批练习,在练习的过程中你需要键入代码,并且让它们运行起来。我不会解释太多,因为这个习题的内容都是以前熟悉过的。这个习题的目的是巩固你学到的东西。几个练习后再见。不要跳过这些练习。不要复制粘贴!

ex7.py

1  print "Mary had a little lamb."

2  print "Its fleece was white as %s." % 'snow'

3  print "And everywhere that Mary went."

4  print "." * 10 # what'd that do?

5

6  end1 = "C"

7  end2 = "h"

8  end3 = "e"

9  end4 = "e"

10 end5 = "s"

11 end6 = "e"

12 end7 = "B"

13 end8 = "u"

14 end9 = "r"

15 end10 = "g"

16 end11 = "e"

17 end12 = "r"

18

19 # watch that comma at the end. try removing it to see what happens

20 print end1 + end2 + end3 + end4 + end5 + end6,

21 print end7 + end8 + end9 + end10 + end11 + end12

试读结束[说明:试读内容隐藏了图片]

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载