第 1 章 出发吧

第 1 章 出发吧

1.1 安装 Python

首先需要在你使用的计算机上安装 Python。

从前的美好时光

{%}

在个人计算机(PC)时代的初期,人们的日子很好过。最早的 PC 大都已经内置了一种名为 BASIC 的编程语言。人们什么也不必安装,他们要做的只是打开计算机,屏幕上会显示“READY”(准备就绪),然后就可以开始键入 BASIC 程序了。听上去很不错,是不是?

当然,那时能得到的也只有“READY”而已。没有程序,没有窗口,也没有菜单。如果你希望计算机做点其他的事情,就必须编写程序!那时没有字处理器、媒体播放器和 Web 浏览器,总之我们如今使用的所有应用当时都没有。甚至根本不存在万维网(Web),当然上网也就无从说起了。当时的计算机没有好玩的图片,也没有声音,只是在出错时偶尔会发出“哔哔”声!

安装 Python 非常容易。我们强烈建议你使用 Hello World 安装程序来安装使用本书所需的 Python 版本。该安装程序可在本书的网站 www.manning.com/books/hello-world-second-edition 上找到。根据你的计算机的操作系统可以找到相应的安装程序版本。

即使你的计算机上已经安装了Python,不打算使用这本书的安装程序,但是还要确保安装这本书需要的一些“额外内容”。查看网站(www.manning.com/books/hello-world-second-edition) 的安装说明(Installation Instructions)部分,看看应该怎么做。这里再强调一次,要想确保本书中的全部代码都能正确运行,最好的办法就是使用我们的安装程序。你可以在本书的网站(www.manning.com/books/hello-world-second-edition)上找到该安装程序。

这里分别提供了面向 Windows、Mac OS X 和 Linux 的版本。这本书里的所有例子都是 Windows 版本,不过在 Mac OS X 或 Linux 中使用 Python 也很类似。只需要按网站上的说明运行适合你的系统的版本。

本书使用的 Python 版本是 2.7.3 版本。如果使用本书网站上的安装程序,你得到的就是这个版本。当你读到这本书时,可能已经有了更新的 Python 版本。这本书里的所有例子已经用 Python 2.7.3 做过测试。它们很可能也可以用于以后的 2.x 版本,不过我们无法预知未来,所以不能保证这一点。

{%}

Python 2 与 Python 3

写作本书的前几年,Python 发布了一个新版本,也就是 Python 3。但是,它并不是 Python 一个真正意义上的“升级版本”。这就导致很多人并不想切换到 Python 3,所以他们仍然使用 Python 2。Python 的开发者也在同时开发 Python 2 的新版本和 Python 3 的新版本。在写作本书第 2 版的时候,Python 2 和 Python 3 的最新版本分别是 Python 2.7.3 和 Python 3.3.0。本书中使用的是 Python 2.7.3,这些代码应该能与 Python 2.x 的任何后续版本都兼容。

更多有关 Python 2 和 Python 3 的细节,请参阅附录 B。

1.2 从 IDLE 启动 Python

启动 Python 有两种方法。一种方法是从 IDLE 启动,也就是我们现在要使用的方法。

在 Start(开始)菜单中,可以看到“Python 2.7”下面的“IDLE (Python GUI)”。点击这个选项,会看到 IDLE 窗口打开(类似下面显示的窗口)。

{%}

IDLE 是一个 Python shell。shell 的意思就是“外壳”,基本说来,这是一个通过键入文本与程序交互的途径,可以利用这个 shell 与 Python 交互。(正是因为这个原因,可以看到窗口的标题栏上显示着 Python Shell)。IDLE 本身还是一个 GUI(图形用户界面),所以在开始菜单中显示为 Python GUI。除了 shell,IDLE 还有其他一些特性,不过这个内容我们稍后再讲。

术语箱

GUI 就是图形用户界面(graphical user interface)。这表示界面中有窗口、菜单、按钮、滚动条等等。没有 GUI 的程序称为文本模式(text-mode)程序、控制台(console)程序或命令行(command-line)程序。

上图中的 >>> 是 Python 提示符(prompt)。提示符是程序等待你键入信息时显示的符号。这个 >>> 提示符就是在告诉你,Python 已经准备好了,在等着你键入 Python 指令。

1.3 来点指令吧

下面就来向 Python 下达我们的第一条指令。

在 >>> 提示符末尾的光标后面键入:

print "Hello World!"

然后按下 Enter(回车键)。(有些键盘上,这个键称为 Return 键。)每键入一行指令之后,都要按回车键。

按下回车键之后,会得到这样一个响应:

Hello World!
>>>

下图显示了 IDLE 窗口中执行这个指令的情况。

{%}

Python 会完全照你说的去做:它会打印(print)你的消息。(在编程中,打印通常是指在屏幕上显示文本,而不是用打印机打印在一张纸上。)你键入的这行文本就是一个 Python 指令。你现在就是在编程!计算机已经在你的掌控之中!

{%}

另外,学习编程时总有这样一个传统:刚开始都是让计算机显示“Hello World!”。我们也会沿袭这个传统,这本书的书名就是从这里来的。欢迎来到编程世界!

这个问题问得好! IDLE 想帮你更好地理解这些内容。它用不同的颜色显示文本,便于你区分代码(code)的不同部分。(在 Python 之类的语言中,代码就是下达给计算机的指令,这只是指令的另一个叫法。)本书后面我会慢慢解释这些不同部分究竟是什么。

如果出问题

如果有错,可能会看到类似下面的结果:

>>> pront "Hello World!"
SyntaxError: invalid syntax
>>>

这个错误消息表示,Python 不懂你键入的内容。在上面的例子中,print 被错拼为 pront,Python 不知道该怎么处理。如果你犯了这个错误,可以再试一次,这一回一定要完全按照例子键入指令。

这是有道理的。因为 print 是一个 Python 关键字,而 pront 不是。

术语箱

关键字(keyword)是作为 Python 语言一部分的特殊词,也称为保留字(reserved word)。

1.4 与 Python 交互

你刚才所做的就是在交互模式中使用 Python。键入命令(指令)后,Python 立即执行这个命令。

术语箱

执行(executing)命令、指令或程序就表示“运行”或者“发生”,这只是运行或发生的另外一种形象说法。

下面就在交互模式中再尝试几条指令。

在提示符后面键入下面这条指令:

>>> print 5 + 3

你会得到:

8
>>>

这么说 Python 确实会做加法!这并不奇怪,因为计算机本来就很擅长算术运算。

下面再试一个:

>>> print 5 * 3
15
>>>

几乎所有计算机程序和语言中都使用 * 符号作为乘号。这个符号称作“星号”或“星”。

如果你在数学课上总是把“5 乘以 3”写作 5 × 3,在 Python 中就必须习惯于用 * 来做乘法。(大多数键盘上,这个符号都在数字 8 的上面。)

那好,再试试这个:

>>> print 2345 * 6789
15920205
>>>

那么,这一个呢?

>>> print 1234567898765432123456789 * 9876543212345678987654321
12193263200731596000609652202408166072245112635269
>>>

没错。但是利用计算机,超大数的数学计算也能完成。不仅如此,你还可以做些别的事情,比如说:

>>> print "cat" + "dog"
catdog
>>>

或者再试试这个:

>>> print "Hello " * 20
Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello
Hello Hello Hello Hello Hello Hello Hello Hello Hello Hello

除了数学计算,计算机擅长的另一件事就是反复地做事情。在这里,我们告诉 Python 让它把 Hello 打印 20 次。

后面还会在交互模式中做更多事情,不过现在……

1.5 该编程了

到目前为止,我们看到的例子都只是(交互模式中)单个的 Python 指令。通过这些指令可以查看 Python 能够做些什么,这固然不错,不过这些例子并不是真正的程序。前面已经提到过,程序是多个指令集合在一起。所以下面就来创建我们的第一个 Python 程序吧。

谈到菜单选择时,比如说File > New,第一部分(这里的File)是主菜单。由 > 可以知道,下一部分(这里的New)是 File 菜单中的一项。这本书中都将使用这种表示方法。

首先需要有办法键入我们的程序。如果只是在交互式窗口中键入指令,Python 不会“记住”你键入的内容。需要使用一个文本编辑器(比如 Windows 上的“记事本”、Mac OS X 上的 TextEdit,或者 Linux 上的 vi),它能把程序保存到硬盘上。IDLE 提供了一个文本编辑器,它比记事本更适合你的需要。可以从 IDLE 的菜单中选择File(文件) > New Window(新窗口)找到这个文本编辑器。

你会看到一个与下图类似的窗口。标题栏显示 Untitled(意思是“未命名”),因为你还没有给文件命名。

{%}

现在,在这个编辑器中键入代码清单 1-1 中的程序。

代码清单 1-1 我们第一个真正的程序

print "I love pizza!"
print "pizza " * 20
print "yum " * 40
print "I'm full."

键入代码之后,使用 File(文件) > Save(保存)或者 File(文件) > Save As(另存为)菜单项保存这个程序。把这个文件命名为 pizza.py。你可以把它保存到你希望的任何位置(只要你记得保存在哪里,以便以后还能找到它)。你可能还想创建一个新的文件夹来保存你的 Python 程序。文件名末尾的 .py 部分很重要,因为这一部分会告诉你的计算机这是一个 Python 程序,而不只是普通的文本文件。

注意这个代码标题中出现了“代码清单1-1”,这是什么意思?如果示例代码构成了一个完整的 Python 程序,我就会对它像这样编号,使你能很容易地在 \examples 文件夹或网站中找到相应的代码。

你可能已经注意到,这个编辑器在程序中使用了不同的颜色。有些词是橙色,还有一些是绿色。这是因为 IDLE 编辑器认为你打算键入一个 Python 程序。对于 Python 程序,IDLE 编辑器会把 Python 关键字用橙色显示,引号中间的所有内容都显示为绿色。这样是为了帮助你更容易地读 Python 代码。

1.6 运行你的第一个程序

保存了你的程序之后,就可以选择 Run(运行)菜单(还是在 IDLE 编辑器中),再选择 Run Module(运行模块),如下图所示。这样就能运行你的程序了。

{%}

Python Shell 窗口(就是启动 IDLE 时出现的那个窗口)再次变成活动窗口,并会显示下面的结果。

{%}

RESTART 部分表明已经开始运行一个程序。(如果你在反复运行程序来进行测试,这会很有帮助。)

然后程序开始运行。当然,这个程序确实没太大用处。不过起码你能让计算机听从你的号令了。随着学习的深入,我们的程序会越来越有意思。

1.7 如果出问题

如果程序中出现错误无法运行,怎么办呢?可能会发生两种不同类型的错误。下面就来了解这两种错误,这样无论遇到哪一种错误你都能知道如何应对。

语法错误

IDLE 在尝试运行程序前会对程序做一些检查。如果 IDLE 发现一个错误,这往往是一个语法错误(syntax error)。语法就是一种编程语言的拼写和文法规则,所以出现语法错误意味着你键入的某个内容不是正确的 Python 代码。

下面给出一个例子:

{%}

这里在 printBye for now!" 之间漏了一个引号。

如果运行这个程序,IDLE 会弹出一个消息“There's an error in your program: invalid syntax.”,意思是说你的程序中有一个错误,语法不正确。你必须查看代码,找出哪里出了问题。IDLE 的编辑器会(用红色)突出显示它认为出错的位置。也许问题不会恰好出现在红色显示的位置,不过应该很接近。

运行时错误

可能发生的第二种错误是运行程序之前 Python(或 IDLE)无法检测出来的错误。这种错误只是在程序运行时才会发生,所以被称为运行时错误(runtime error)。下面是程序中出现运行时错误的例子:

print "Hello, and welcome to Python!"
print "I hope you will enjoy learning to program."
print "Bye for now!" + 5

如果保存这个程序,并试图运行,程序确实会开始运行。前两行会打印出来,但是接下来你会得到一个错误消息:

{%}

Traceback 开头的代码行表示错误消息开始。下一行指出哪里发生了错误,这里会给出文件名和行号。然后显示出错的代码行,这可以帮助你找到代码中哪里出了问题。错误消息的最后一部分会告诉你 Python 认为存在什么问题。对编程和 Python 有了更多了解之后,就更容易理解这个消息是什么意思了。

{%}

听我说,卡特,这有点像将苹果和鳄鱼放在一起。

在 Python 中,不能把两个完全不同的东西加在一起,比如说数字和文本。正是因为这个原因,print "Bye for now!" + 5 会给出错误消息。这就像是在说:“5 个苹果加 3 只鳄鱼是多少?”结果是 8,但是 8 个什么呢?把这些东西加在一起没有任何意义。不过几乎所有东西都可以乘以一个数来翻倍。(如果有两只鳄鱼,再乘以 5,那你就会有 10 只鳄鱼!)正因如此,print "Bye for now!" * 5 是可以的。

像程序员一样思考

看到错误消息也不用担心。它们只是为了帮助你找出哪里出了问题,以便你改正错误。如果程序中确实出了问题,你肯定更希望看到错误消息。没有给出任何错误消息的 bug 1 才更难找到!

1bug,意思是“臭虫”。程序员通常把讨厌的错误说成 bug。——编者注

1.8 你的第二个程序

第一个程序没有多大实际意义,它只是在屏幕上打印了一些内容。下面来试一个更有意思的程序。

代码清单 1-2 中的代码编写的是一个简单的猜数游戏。与第一个程序一样,先 选择 File(文件) > New Window(新窗口)在 IDLE 编辑器中新建一个文件。键入代码清单 1-2 中的代码,然后保存这个文件。可以把这个文件命名为你喜欢的任何名字,只要以“.py”结尾就可以。NumGuess.py 就是一个不错的名字。

这里只有 18 行 Python 指令,另外为了便于阅读还加入了一些空行。键入这些代码不会花费太多时间。虽然我们还没有说明这个代码到底是什么意思,不过不用担心,很快就会讲到。

代码清单 1-2 猜数游戏

{%}

键入这些代码时,注意 while 指令后面代码行是缩进的,另外 ifelif 后面的代码缩进得更多一些。还要注意有些代码行末尾有冒号。如果在正确的位置键入冒号,编辑器会自动将下一行缩进。

保存代码后,就像运行第一个程序一样,选择 Run(运行) > Run Module(运行模块)来运行这个程序。尝试一下,看看会发生什么。下面是我运行这个程序的示例:

>>> ======================= RESTART =======================
>>>
AHOY!  I'm the Dread Pirate Roberts, and I have a secret!
It is a number from 1 to 99.  I'll give you 6 tries.
What's yer guess? 40
Too high, landlubber!
What's yer guess? 20
Too high, landlubber!
What's yer guess? 10
Too low, ye scurvy dog!
What's yer guess? 11
Too low, ye scurvy dog!
What's yer guess? 12
Avast! Ye got it!  Found my secret, ye did!
>>>

我猜了 5 次才猜到这个秘密数,也就是 12。

后面几章我们会学习有关 whileifelseelifinput 指令的所有内容。不过估计你已经大致了解了这个程序的基本过程了。

  • 由程序随机选取秘密数。

  • 用户输入他猜的数。

  • 程序根据秘密数检查用户猜的结果:太大还是太小?

  • 用户不断尝试,直到猜出这个数,或者用完所有机会。

  • 猜到的数与秘密数一致时,玩家获胜。

你学到了什么

哇!内容真不少。这一章中,你做了下面这些事情:

  • 安装了 Python;

  • 学习了如何启动 IDLE;

  • 了解了交互模式;

  • 交给 Python 一些指令来执行;

  • 看到了 Python 知道如何完成算术运算(包括非常大的数);

  • 启动 IDLE 文本编辑器键入你的第一个程序;

  • 运行你的第一个 Python 程序;

  • 了解错误消息;

  • 运行你的第二个 Python 程序:猜数游戏。

测试题

1. 如何启动 IDLE ?

2. print 的作用是什么?

3. Python 中表示乘法的符号是什么?

4. 启动运行一个程序时 IDLE 会显示什么?

5. 运行程序又叫做什么?

动手试一试

1. 在交互模式中,使用 Python 计算一周有多少分钟。

2. 编写一个简短的小程序,打印 3 行:你的名字、出生日期,还有你最喜欢的颜色。打印结果应该类似这样:

My name is Warren Sande.
I was born January 1, 1970.
My favorite color is blue.

保存这个程序,然后运行。如果程序没有像你期望的那样运行,或者给出了错误消息,试着改正错误,让它能够正确运行。

目录

  • 版权声明
  • 对本书第 1 版的赞誉
  • 对本书第 2 版的赞誉
  • 推荐序一
  • 推荐序二
  • 第 1 版译者序
  • 前言
  • 关于本书
  • 第 1 版致谢
  • 第 2 版致谢
  • 第 1 章 出发吧
  • 第 2 章 记住内存和变量
  • 第 3 章 基本数学运算
  • 第 4 章 数据的类型
  • 第 5 章 输入
  • 第 6 章 GUI——图形用户界面
  • 第 7 章 判断再判断
  • 第 8 章 转圈圈
  • 第 9 章 全都为了你——注释
  • 第 10 章 游戏时间到了
  • 第 11 章 嵌套与可变循环
  • 第 12 章 收集起来——列表与字典
  • 第 13 章 函数
  • 第 14 章 对象
  • 第 15 章 模块
  • 第 16 章 图形
  • 第 17 章 动画精灵和碰撞检测
  • 第 18 章 一种新的输入——事件
  • 第 19 章 声音
  • 第 20 章 更多 GUI
  • 第 21 章 打印格式化与字符串
  • 第 22 章 文件输入与输出
  • 第 23 章 碰运气——随机性
  • 第 24 章 计算机仿真
  • 第 25 章 Skier 游戏的说明
  • 第 26 章 Python Battle
  • 第 27 章 接下来呢
  • 附录 A 变量命名规则
  • 附录 B Python 2 与 Python 3 的差异
  • 附录 C 自测题答案