Python游戏编程快速上手(txt+pdf+epub+mobi电子书下载)


发布时间:2020-08-04 21:58:45

点击下载

作者:[美] Al Sweigart 斯维加特

出版社:人民邮电出版社

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

Python游戏编程快速上手

Python游戏编程快速上手试读:

前言

感谢您阅读本书。编写本书最初的动机是,我看到目前很少有能够激发孩子学习编程的兴趣的图书。我最初使用BASIC编程语言开始编程,使用的是一本像本书一样的书。

在写作本书的过程中,我意识到,像Python这样的现代语言使得编程更加容易,并且为新一代的程序员提供了更多的功能。Python拥有平缓的学习曲线,而且是供专业程序员使用的一种正规语言。

目前的编程书籍大多分为两种类型。第一种,与其说是教编程的书,倒不如说是在教“游戏制作软件”,或教授使用一种呆板的语言,使得编程“简单”到不再是编程。而第二种,它们就像是教数学课一样教编程:所有的原理和概念都以小的应用程序的方式呈现给读者。本书采用了不同的方式直接展示了游戏的源代码,并且通过实例来解释编程的原理。

本书第3版有哪些新的内容?

第3版与第2版相比,没有增加新的内容。但是,第3版精简了20%的篇幅,却介绍了相同的内容。根据需要,增加了解释,并且讲解得更加清晰。

为了防止混淆,源代码故意与第2版保持相同。如果你已经阅读了第2版,就没有理由再阅读本书。然而,如果你正打算编程或介绍朋友学习编程,第3版会让学习过程更加简单、顺利和有趣。

本书的目标读者

编程并不难。但是教你通过编程来做有趣事情的学习材料却很难找到。有些计算机书籍会介绍很多大部分新手程序员都不需要了解的话题。本书将介绍如何编写自己的计算机游戏。你将学习到有用的技巧和可以展示的有趣游戏。本书的目标读者是:● 想要学习计算机编程的完全初学者,他们甚至之前没有任何编程

经验;● 想要通过创建游戏来学习编程的儿童和青少年;● 想要教其他人编程的成年人和教师;● 任何想要通过学习专业编程语言来学习如何编程的人,无论是年

轻人还是老年人。译者序

对于编程初学者来说,Python是一种理想的语言。Python的语法并不复杂,学习起来相对比较简单。没有太多编程经验的人,也可以较为轻松地读懂一个简单的Python脚本并理解它在做什么。一旦掌握了Python的基础知识,也比较容易从简单的程序转移到更为高级的项目。而且,Python可以用于很多的领域,从科学计算到游戏开发。即使是程序员新手,也总是能够找到自己感兴趣的项目和应用领域。

市面上已经有很多介绍编程和Python语言的图书了。然而,在本书作者的眼里,这些书大致分为两种类型。而这两种类型,似乎与作者心目中教授编程的图书相去甚远,也都不太适合青少年阅读和学习。正因为很少有能够激发青少年学习编程兴趣的图书,作者才萌发了编写本书的想法。

本书专门针对任何想要学习Python或初次接触编程的人,特别适合作为不同年龄的初学者的第一本编程学习图书。本书的内容浅显易懂,具有很强的操作性,所有的理论知识都是在游戏实例中循序展开。书中的示例,都是一个一个简单但生动有趣的小游戏。本书对这些游戏程序的设计和代码进行深入细致的讲解和分析,使读者在不知不觉之中就能够掌握Python编程的基本知识和方法技巧。一路下来,读者将通过创建游戏来扩展自己的编程技能,并且将所学的知识付诸应用。

我的儿子若瑜上小学一年级,和大多数同龄小朋友一样,他酷爱各种电子游戏。在翻译这本关于游戏编程的书籍的过程中,若瑜表现出极大的热情,他成为第一位读者,每完成一章,他都会通读一次,还会反复地玩书中的游戏;尽管这些游戏很简单,但是对他的吸引力还是很大。他甚至和我约定,今年的生日礼物,就是教会他自己来编写本书中的游戏。感谢若瑜对本书翻译工作的支持和帮助。

我想这样一本能够吸引小朋友的图书,也一定能够让读者朋友感到编程的乐趣,并能从中受益。特别对于打算学习编程的青少年儿童,这是一本不可多得的好书。

虽然付出了很大的精力和心血翻译本书,但难免有不足之处,恳请广大读者谅解,或通过邮件reejohn@sohu.com赐教。第1章安装Python

本章主要内容:● 下载并且安装Python解释器;● 如何使用本书;● 本书的网址:http://inventwithpython.com。

你好!本书介绍了如何编写电子游戏。一旦你了解了本书中的游戏是如何工作的,就能够创建自己的游戏了。你只需要一台计算机、一款叫做Python解释器的软件以及这本书。Python解释器可以从网上免费下载。

当我还是一个孩子时,就是像这样的一本书教会了我如何编写第一个程序和游戏。那本书既有趣又简单。现在,作为一名成年人,我仍然能够享受到编程的乐趣,并且能从中获到回报。但是,即便当你长大成人后并没有成为一名程序员,编程也还是一种有用而且有趣的技能。

计算机是不可思议的机器,并且学习编写计算机程序并不像人们想象中的那样难。如果你能够阅读本书,那么就可以编写计算机程序。计算机程序就是计算机所能够理解的一堆指令,这就像一本故事书就是读者可以读懂的一堆句子一样。既然电子游戏就是计算机程序,那么它们也是由指令组成的。

要对计算机发号施令,就使用计算机能够理解的语言来编写一个程序。本书介绍的是一种叫做Python的编程语言。有很多种不同的编程语言,如BASIC、Java、JavaScript、PHP和C++等。

当我还是一个孩子的时候,通常,BASIC是作为第一门编程语言来学习。然而,此后出现了像Python这样的新的编程语言。Python学起来甚至比BASIC还要简单!但是Python也是供专业程序员使用的一种正规语言。很多成年人在工作中使用Python并以此为乐趣。

在本书中,我们将要创建的游戏看上去比Xbox、PlayStation或者Nintendo的游戏简单。这些游戏没有绚丽的图案,因为我们要用它们来教授基本的编程知识。我们有意选择这些简单的游戏,以便你可以专注于学习编程。游戏并非复杂才有趣。1.1 下载和安装Python

我们需要安装一个叫做Python解释器的软件。解释器程序理解我们用Python语言编写的指令。从现在开始,我把“Python解释器软件”直接简称为“Python”。

特别提示!一定要安装Python 3而不是Python 2。本书中的程序使

用的是Python 3,如果试图使用Python 2来运行这些程序,

就会出错。这一点非常重要,我在图1-1中给出了一个卡通

企鹅的形象,来提醒你要安装Python 3,所以请一定留意这

一点。图1-1 特别显眼的企鹅提醒你要安装Python3

在Windows操作系统中,下载Python安装程序(文件名的后缀是.msi),并且双击它。按照安装程序在屏幕上显示的说明来安装Python,如下所示:

1.选择Install for All Users,然后单击Next按钮。

2.单击Next按钮,将程序安装在C:\Python34文件夹下。

3.单击Next按钮,跳过Customize Python部分。

在Mac OS X操作系统中,从网上下载适合你的OS X版本的.dmg文件,并且双击它。按照安装程序在屏幕上显示的说明安装Python,如下所示:

1.在一个新的窗口中打开DMG包时,双击Python.mpkg文件。可能需要输入计算机管理员的密码。

2.在Welcome部分,单击Continue按钮,并且单击Agree按钮以接受许可协议。

3.选择HD Macintosh(或者任意硬盘驱动器名称),并且点击Install按钮。

如果你使用的是Ubuntu操作系统,可以通过Ubuntu Software Center,按照如下步骤安装Python:

1.打开Ubuntu Software Center。

2.在窗口右上角的搜索框中输入Python。

3.选择IDLE(使用Python 3.4),或者任何最新的版本。

4.单击Install按钮。可能需要输入计算机管理员的密码来完成安装。1.2 启动IDLE

IDLE表示交互式开发环境(Interactive DeveLopment Environment)。对于编写Python程序来说,这个开发环境就像是字处理软件一样。在不同的操作系统上,启动IDLE的方式有所不同。

在Windows操作系统中,单击左下角的启动按钮,输入“IDLE”并且选择IDLE(Python GUI)。

在Mac OS X操作系统中,打开Finder窗口,点击Applications。接下来单击Python 3.4。然后单击IDLE图标。

在Ubuntu或者Linux操作系统中,打开一个终端窗口,然后输入“idle3”。也可以单击屏幕上端的Applications。然后单击Programming和IDLE 3。

当第一次运行IDLE时,出现的窗口是交互式的shell,如图1-2所示。你可以在交互式shell的>>>提示符后输入Python指令,Python就会执行这些指令。显示完执行指令的结果之后,会出现一个新的>>>提示符,并等待下一条指令。图1-2 Windows、OS X和Ubuntu Linux操作系统的IDLE程序的交互式shell1.3 如何使用本书

本书的大多数的章,一开始都会给出一个程序示例,并展示运行这个示例程序的样子。程序中用户输入的部分会用粗体字表示。

请在IDLE文件编辑器中自行输入代码,而不是下载或者复制/粘贴代码。花些时间录入代码,这会帮助你更好地记住如何编程。行号和空格

当按照本书中内容录入源代码时,不要录入每一行开头处的行号。例如,你会看到书中代码如下所示:9. number = random.randint(1, 20)

不要录入左边的“9.”,以及紧随其后的空格。只需要录入如下内容即可:number = random.randint(1, 20)

这些编号只是为了便于在书中引用特定的代码行。它们并非实际程序的一部分。

除了行号之外,确保严格按照代码的样子进行录入。注意,其中一些代码行缩进了4个或8个空格。IDLE中的每个字符是等宽的,所以你可以通过数一数上一行和下一行的字符数来统计空格的数量。

例如,用一个点表示缩进空格,看上去如下所示:while guesses < 10: if number == 42: print('Hello')图书中的文本折行

一些代码行太长了,无法在图书页面中放到一行之中,那么,代码的文本会换到新的一行中。当录入这些代码行的时候,要将所有代码输入到同一行,并且不要按下回车键。当开始新的一行的时候,你可以从代码左边的行号来区分。例如,如下的代码只有两行:1. print('This is the first instruction! xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxx') 2. print('This is the second instruction, not the third instruction.')

第一行代码折行了,这使得代码段看上去好像是一共有3行。注意,这只是因为图书的页面不够宽了,无法把第一条指令印刷在一行中。1.4 寻求在线帮助

本书的网址是http://inventwithpython.com。你可以从那里找到许多与本书相关的资源。本书中的几个链接都使用invpy.com域名以缩短URL。

网站http://reddit.com/r/inventwithpython是就本书相关的编程问题提问的一个好地方。一般性的Python问题可以去网站LearnProgramming和LearnPython发贴子,它们的网址分别是http://reddit.com/r/learnprogramming和http://reddit.com/r/learnpython。

你还可以把编程问题发送到作者的邮箱al@inventwithpython.com 。

请记住,聪明的提问方式对自己和别人都有帮助。一定要阅读这些网站上“Frequently Asked Questions”部分,这些网站都会介绍如何以正确的方式提问。当询问编程问题时,注意如下几点:● 如果录入了本书中的程序,但是发现一个错误,请首先通过

http://invpy.com/diff的在线diff工具检查录入错误。复制代码并将

其粘贴到diff工具中,以查看你的程序和本书中的代码之间的任

何差异。● 当描述错误的时候,说明你想要做什么。这会让帮助你的人知道

你是否完全走错了路。● 复制并粘贴完整的错误消息和代码。● 从网上查找是否有人也问过(或者回答)和你同样的问题。● 说明你已经尝试了哪些方法去解决问题。这就会告诉人们,你已

经做了一些工作来试图自己解决问题。● 要有礼貌。不要命令帮助你的人或者给帮助你的人施压以求他们

快速做出回答。

问别人“为什么我的程序不能工作?”,这样的问题并不能告诉他们任何有用的信息。应该告诉他们你想要做什么、确切的错误是什么以及你的操作系统和版本。第2章交互式shell

本章主要内容:● 整数和浮点数;● 表达式;● 值;● 操作符;● 计算表达式;● 在变量中存储值。

在开始创建游戏之前,我们需要先介绍一些基本的编程概念。本章不会创建游戏,但是学习这些概念是编写电子游戏程序的第一步。我们先来学习如何使用Python的交互式shell。2.1 一些简单的数学知识

按照第1章中介绍的步骤打开IDLE,然后使用Python来求解一些简单的数学问题。交互式shell可以像计算器一样工作。在交互式shell的>>>提示符之后,输入2+2,然后按下回车键(有些键盘上显示为RETURN键)。

图2-1展示了交互式shell给出的响应是数字4。

这道数学题就是一个简单的编程指令。加号(+)告诉计算机把数字2和2相加。表2-1列出了Python中其他可用的数学符号。减号(-)是数字相减。乘号(*)是数字相乘。除号(/)是数字相除。图2-1 在交互式shell中输入2+2表2-1 Python中的各种数学操作符操作符运算+加法-减法乘法*/除法

当以这种方式使用时,+、-、*和/叫做操作符。操作符告诉Python要对它们旁边的数字进行何种运算。2.1.1 整数和浮点数

整数就是诸如4、99或者0这样的数。浮点数(简写为float)就是诸如3.5、42.1或者5.0这样的分数或小数。在Python中,数字5是整数,但是5.0是浮点数。这些数字都称为值。2.1.2 表达式

下面这些数学问题就是表达式的示例。计算机可以在几秒钟之内解决数百万道这样的数学题。表达式是由操作符(数学符号)连接的值(数字)组成的。尝试在交互式shell中输入一些这样的数学问题,每输入完一道题后按一下回车键。2+2+2+2+2 8*6 10-5+6 2 + 2

当输入上面的指令后,交互式shell将如图2-2所示。图2-2 输入指令后IDLE窗口的样子图2-3 表达式由值和操作符组成

注意,在2+ 2的示例中,值和操作符之间可以有任意多个空格。然而,当把指令输入到交互式shell中时,总是从一行的开头开始执行(即指令之前不能有空格)。2.2 计算表达式

当计算机求解表达式10 + 5并且得到值15的时候,它就已经计算了这个表达式。计算一个表达式就是把表达式规约为一个数字,就像解答一道数学题而把问题简化成一个数字一样:数字就是答案。表达式10 + 5和表达式10 + 3 + 2的计算结果都是15。

表达式可以是任意大小的,但它们总是会求解得到一个数字。即便单个值也可以是表达式:表达式15的计算结果就是值15。例如,表达式8 * 3 / 2 + 2 + 7 -9,通过如下步骤,其计算结果是值12.0。8 * 3 / 2 + 2 + 7–9 ▼ 24 / 2 + 2 + 7–9 ▼ 12.0 + 2 + 7–9 ▼ 14.0 + 7–9 ▼ 21.0–9 ▼ 12.0

在交互式shell中看不到所有这些步骤。交互式shell对表达式进行运算,并且只把结果展示给我们。>>> 8 * 3 / 2 + 2 + 7 -9 12.0

需要注意的是,除法操作符(/)的运算结果是一个浮点数,所以24/2的结果是12.0。使用浮点数的数学运算,其结果也是浮点数,所以12.0 +2的结果是14.0。语法错误

如果在交互式shell中输入5+,将会得到一条错误消息。>>> 5 + SyntaxError: invalid syntax

产生这个错误,是因为5+不是一个表达式。表达式通过操作符来连接值。但是加法操作符期待+后边有一个值。当漏掉这个值时,就会出现一个错误。

SyntaxError表示Python不理解这条指令,因为你的输入不正确。很多时候,从事计算机编程不只是告诉计算机要做什么,还要知道如何告诉它。

但是,不要担心出错。错误并不会对计算机造成危害。只要在交互式shell中的下一个>>>提示符处,重新输入正确的指令即可。2.3 在变量中存储值

也可以把表达式的计算结果的值存储到变量中,以便后面可以使用它。可以把变量当做是一个可以保存值的盒子。

一条赋值语句指令会把一个值保存到一个变量中。输入变量的名称,后边跟着等号(=称为赋值操作符),然后是要存储到这个变量中的值。例如,在交互式shell中输入spam = 15:>>> spam = 15 >>>

这将把值15存储到spam变量的盒子中,如图2-4所示。名字“spam”是盒子的标签(Python由此可以识别变量),而值写在盒子中的一张便签上。图2-4 变量就像是可以容纳值的盒子

当按下回车键时,你不会看到任何响应。在Python中,如果没有出现错误,就表示成功地执行了指令。然后将会出现>>>提示符,你可以输入下一条指令了。

和表达式不同,语句是不会计算为任何值的指令。正因为如此,在spam = 15之后,交互式shell的下一行中没有显示任何的值。如果你不清楚哪些指令是表达式,哪些指令是语句,那么请记住:表达式会得到一个值,而任何其他类型的指令都是一条语句。

变量保存的是值而不是表达式。例如,考虑一下语句spam = 10 + 5和spam = 10 + 7 - 2中的表达式。它们的运算结果都是15。最终结果是相同的:两条赋值语句都把值15保存到了变量spam中。

第一次在赋值语句中使用一个变量的时候,Python将会创建该变量。要查看变量中的值,在交互式shell中输入该变量的名称:>>> spam = 15 >>> spam 15

表达式spam得到了变量spam中的值,即15。可以在表达式中使用变量。尝试在交互式shell中输入如下指令:>>> spam = 15 >>> spam + 5 20

我们已经把变量spam的值设置为15,所以输入spam + 5就像是输入表达式15 + 5一样。下面是spam + 5的运算步骤:spam + 5 ▼ 15 + 5 ▼ 20

在赋值语句创建变量之前,不能使用该变量。否则,Python将会给出一个NameError的错误,因为尚不存在该名称的变量。输错了变量名称也会得到这样一个错误:>>> spam = 15 >>> spma Traceback (most recent call last): File "", line 1, in spma NameError: name 'spma' is not defined

出现这个错误,是因为虽然有spam变量,但是并没有名为spma的变量。

可以通过输入另一条赋值语句来修改变量中存储的值。例如,尝试在交互式shell中输入如下语句:>>> spam = 15 >>> spam + 5 20 >>> spam = 3 >>> spam + 5 8

当第一次输入spam + 5时,表达式的计算结果是20,因为我们把15存储在spam中。然而,当输入spam = 3时,用值3替代(或覆盖)了值15。现在,当我们输入spam + 5时,表达式的计算结果是8,因为现在spam的值是3。覆盖的过程如图2-5所示。图2-5 用值3覆盖了spam中的值15

甚至可以使用spam变量中的这个值,来给spam赋一个新的值:>>> spam = 15 >>> spam = spam + 5 20

赋值语句spam = spam + 5的意思是:“spam变量中的新值是,spam当前的值加上5”。通过在交互式shell中输入如下的语句,让spam中的值持续几次增加5:>>> spam = 15 >>> spam = spam + 5 >>> spam = spam + 5 >>> spam = spam + 5 >>> spam 30使用多个变量

在程序中,可以根据需要创建任意多个变量。例如,让我们给名为eggs和bacon的两个变量分配不同的值,如下所示:>>> bacon = 10 >>> eggs = 15

现在,变量bacon中是10,变量eggs中是15。每个变量都有自己的盒子,其中拥有其自己的值,如图2-6所示。图2-6 变量“bacon”和变量“eggs”中所存储的值

尝试在交互式shell中输入spam = bacon + eggs,然后查看spam中的新值:>>> bacon = 10 >>> eggs = 15 >>> spam = bacon + eggs >>> spam 25

现在,spam中的值是25。当把bacon和eggs相加时,就是把其值10和15相加。变量包含的是值而不是表达式。把值25赋给变量spam,而不是把表达式bacon + eggs赋给变量。在spam = bacon + eggs赋值语句之后,对于bacon或者eggs的修改不会再影响到spam。2.4 本章小结

在本章中,我们介绍了关于编写Python指令的基础知识。Python需要你以严格的方式,准确地告诉它要做什么工作。计算机不具备人的常识,并且只能理解特定的指令。

表达式是用操作符(如+或-)把值(如2或5)组合起来。Python可以计算表达式,也就是把表达式规约为一个值。可以把值保存在变量中,以便程序可以记住它们,并且随后可以使用它们。

在Python中,有许多其他类型的操作符和值。在下一章中,我们将介绍更多的基础概念,并且编写第一个程序。我们还会介绍在表达式中使用文本。Python不仅能够处理数字,它的功能比计算器强大得多。第3章编写程序

本章主要内容:● 执行的流程;● 字符串;● 连接字符串;● 数据类型(诸如字符串或者整数);● 使用文件编辑器来编写程序;● 在IDLE中保存并且运行程序;● print()函数;● input()函数;● 注释;● 区分大小写。

到目前为止,我们已经介绍了足够的数学相关的知识。现在,我们来看看Python能够对文本做些什么。在本章中,我们将介绍如何把文本保存到变量中,如何合并文本,以及如何在屏幕上显示文本。

几乎所有的程序都会向用户显示文本,并且用户可以使用键盘向程序输入文本。在本章中,你还会创建自己的第一个程序。这个程序显示了一句问候:“Hello World!”,并且会询问用户的姓名。3.1 字符串

在Python中,把文本值叫做字符串。字符串值可以像整数或者浮点数一样地使用。我们可以把字符串保存到变量中。在代码中,字符串值使用单引号(')作为起始和结束。尝试在交互式shell中输入如下代码:>>> spam = 'hello'

单引号告诉Python,字符串从哪里开始到哪里结束。单引号不是字符串值的文本的一部分。现在,如果在交互式shell中输入spam,就可以看到spam变量中的内容。请记住,Python将变量计算为变量中所存储的值。在这个示例中,spam存储的值就是字符串'hello'。>>> spam = 'hello' >>> spam 'hello'

字符串可以包含任意的键盘字符,其长度也可以是任意的。一些字符串示例如下所示:'hello' 'Hi there!' 'KITTENS' '7 apples, 14 oranges, 3 lemons' 'Anything not pertaining to elephants is irrelephant.' 'A long time ago, in a galaxy far, far away...' 'O*&#wY%*&OCfsdYO*&gfC%YO*&%3yc8r2'3.2 连接字符串</p><p>可以使用操作符把字符串值组合起来生成表达式,就像对整数和浮点数所做的那样。可以使用+操作符组合两个字符串。这就是字符串连接。尝试在交互式shell中输入'Hello' + 'World!'。>>> 'Hello' + 'World!' 'HelloWorld!'</p><p>这个表达式的结果是一个字符串值'HelloWorld!'。两个单词之间没有空格,因为两个待连接的字符串中都没有空格,这和下面示例不同:>>> 'Hello ' + 'World!' 'Hello World!'</p><p>对于字符串和整数来讲,+操作符的作用并不相同,因为字符串和整数是不同的数据类型。所有的值都有一个数据类型。'Hello'的数据类型是字符串。5的数据类型是整数。数据类型告诉Python,当计算表达式时,操作符应该做什么。对于字符串,+操作符会把它们连接起来;而对于整数和浮点数,+操作符会把它们相加。3.3 在IDLE的文件编辑器中编写程序</p><p>到目前为止,我们已经在IDLE的交互式shell中输入过指令,并且一次只输入一条指令。然而,当编写程序时,会输入多条指令,然后让它们一起运行。让我们来编写第一个程序!</p><p>IDLE的另外一个部分叫做文件编辑器。单击交互式shell窗口顶端的File菜单,然后选择New File。将会出现一个空白窗口供你输入程序代码,如图3-1所示。</p><p>两个窗口看上去很相似,但是请记住:交互式shell窗口有>>>提示符,而文件编辑器窗口则没有。图3-1 文件编辑器窗口(上边)和交互式shell窗口(下边)3.4 Hello World!</p><p>对于程序员来讲,让自己的第一个程序在屏幕上显示“Hello world!”,这是一个传统。现在,你也要创建自己的Hello World程序了。</p><p>当输入程序时,不要输入代码左边的数字。这些数字是为了方便本书按照行号来引用代码。文件编辑器窗口的右下角会告诉你当前光标的位置。图3-2展示了当前光标在第1行第0列。图3-2 文件编辑器窗口右下角会告诉你当前光标在何处hello.py</p><p>在新的文件编辑窗口中输入如下文本。这就是程序的源代码。其中包含了当程序运行时Python所要执行的指令。</p><p>请注意!本书中的程序只能在Python 3中运行,而在Python 2中</p><p>则不无法运行。当IDLE窗口启动时,它会在上方显示类似“Python 3.4.2”的信息。如果你已经安装了Python 2,可以</p><p>同时安装Python 3。可以去https://python.org/download/下载</p><p>Python 3。hello.py 1. # This program says hello and asks for my name. 2. print('Hello world!') 3. print('What is your name?') 4. myName = input() 5. print('It is good to meet you, ' + myName)</p><p>IDLE程序用不同的颜色来表示不同类型的指令。输入代码之后,窗口看上去如下所示:图3-3 输入代码后,文件编辑器窗口的样子3.5 保存程序</p><p>一旦输入了源代码,就可以点击File►Save As来保存它。或者按下快捷键Ctrl-S来保存源代码。图3-4展示了这将会打开的Save As窗口。在File name文本框中输入hello.py,然后点击Save按钮。图3-4 保存程序</p><p>当输入程序时,应该经常保存。这样的话,即使计算机崩溃或者突然退出IDLE,也不会丢失太多的工作成果。3.6 打开保存过的程序</p><p>要加载之前保存过的程序,单击File►Open。在所出现的窗口中选择文件,并且单击Open按钮。你所保存过的hello.py程序将会在文件编辑器窗口中打开。</p><p>现在,是时候运行程序了。在文件编辑器窗口中点击File►Run►Run Module或者按下F5键。程序会在交互式shell窗口中运行。</p><p>当程序要求输入姓名时,请输入你的姓名,如图3-5所示。图3-5 运行hello.py之后的交互式shell窗口</p><p>当输入姓名并且按下回车键时,程序将会用你的名字来打招呼。恭喜!你已经编写了第一个程序,并且现在已经成为一名软件程序员了。1秒钟后再次按下F5键运行该程序,输入另一个名字。</p><p>如果有错误,使用http://invpy.com/diff上的在线diff工具,把你的代码与书中的代码进行比较。复制文件编辑器中的代码并且粘贴到这个Web页面中,然后点击Compare按钮。这个工具会高亮显示你的代码与本书代码之间的所有区别,如图3-6所示。图3-6 http://invpy.com/diff上的在线diff工具</p><p>如果在编写代码时得到一个NameError错误,如下所示:Hello world! What is your name? Albert Traceback (most recent call last): File "C:/Python26/test1.py", line 4, in myName = input() File "", line 1, in NameError: name 'Albert' is not defined </p><p>这表示你使用的是Python 2,而不是Python 3。请从https://python.org/download下载并安装Python 3版本。用Python 3重新运行该程序。3.7 “Hello World”程序如何工作</p><p>每行代码就是一条可供Python解释的指令。这些指令构成了程序。计算机程序的指令就像是菜谱的操作步骤。从程序的顶部,沿着指令的列表向下,顺序地执行每条指令。</p><p>在程序中,把Python当前所处的指令叫做执行。当程序开始运行时,执行是第一条指令。执行完这条指令之后,执行移到下一条指令。</p><p>我们来看一下每行代码是如何工作的。我们从第1行开始。注释1. # This program says hello and asks for my name.</p><p>这条指令是一条注释。跟在#(叫做井号)后边的任何文本都是一条注释。注释不是供Python读取的,而是供程序员阅读的。Python会忽略掉注释。注释是程序员针对代码做些什么而给出的注解。你可以在注释中写下任何内容。为了能够更容易阅读源代码,本书中的注释使用灰色文本表示。</p><p>程序员通常会在代码的开始处放置一个注释,以作为程序的标题。3.7.1 函数</p><p>函数就像是程序中的一个小程序。函数包含许多可执行的指令,当调用函数时,就会执行这些指令。Python提供了一些已经内建的函数。下面会介绍print()和input()这两个函数。函数的最美妙之处在于,你只需要知道函数是做什么的,而无需知道它是如何做的。</p><p>函数调用是一条指令,它告诉Python运行函数中的代码。例如,你的程序调用了print()函数,在屏幕上显示一个字符串。print()函数接受在括号中字符串作为输入,并且把该文本显示到屏幕上。</p><p>要在屏幕上显示Hello world!,输入print函数名称,后边跟随着开始圆括号,然后跟随着'Hello world!'字符串和结束圆括号。3.7.2 print()函数2. print('Hello world!') 3. print('What is your name?')</p><p>第2行和第3行是对print()函数的调用。在函数调用中,括号之间的值是参数。第2行print()函数调用的参数是'Hello world!'。第3行print()函数调用的参数是'What is your name?'。这叫做给print()函数传递参数。</p><p>在本书中,函数名称后边都有一个圆括号。这使得print()在本书中的含义更加明确,它表示名为print()的一个函数,而不是名为print的一个变量。这就像用引号把数字42括起来,告诉Python这是一个字符串'42',而不是数字42。3.7.3 input()函数4. myName = input()</p><p>第4行是带有变量(myName)和函数调用(input())的一条赋值语句。当调用input()时,程序等待用户输入文本。用户输入的文本字符串成为函数调用所得到的结果值。在表达式中,可以使用一个值的任何位置,也都可以使用函数调用。</p><p>函数调用的结果值叫做返回值(实际上,“函数调用返回的值”和“函数调用的结果值”的含义是相同的)。在这个示例中,input()函数的返回值是用户输入他们自己的名称的字符串。如果用户输入“Albert”,input()函数调用的结果就是字符串'Albert'。计算过程如下所示:myName = input() ▼ myName = 'Albert'</p><p>这样就把字符串值'Albert'存储到了myName变量中。3.7.4 在函数调用中使用表达式5. print('It is good to meet you, ' + myName)</p><p>上面这行代码是另一个print()函数调用。在print()括号中,是表达式'It is good to meet you, ' + myName。然而,参数总是单个的值。Python会先计算这个表达式,然后将其值作为参数传递给函数。如果MyName中存储的是'Albert',计算过程如下所示:print('It is good to meet you, ' + myName) ▼print('It is good to meet you, ' + 'Albert') ▼print('It is good to meet you, Albert')</p><p>程序就是这样根据名称来向用户打招呼的。3.7.5 终止程序</p><p>如果程序执行了最后一行代码,它会终止或者退出。这意味着程序将停止运行。Python会忘掉在变量中保存的所有的值,也包括存储在myName中的字符串。如果再次运行程序,并且输入一个不同的名字,程序会认为这才是你的名字。Hello world! What is your name? Carolyn It is good to meet you, Carolyn </p><p>请记住,计算机只能做程序要求它做的事情。计算机不会说话,只能严格遵循你给它的指令。计算机不会在乎你录入的是自己的名字、别人的名字还是一些无聊的内容。你可以输入任何想要输入的内容。计算机都会以相同的方式来处理它:Hello world! What is your name? poop It is good to meet you, poop 3.8 变量名称</p><p>给变量一个具有描述性的名称,会更容易理解它在程序中的用途。假设你正在搬家,并且把一个要搬运的盒子都贴上“Stuff”。这么做根本就不会有任何帮助!</p><p>你也可以把这个变量命名为abrahamLincoln或nAmE,而不是命名为myName。Python不关心这些。它只是以相同的方式运行程序。</p><p>变量名称区分大小写。区分大小写意味着会把字母相同但大小写不同的变量名当做是不同的变量。所以在Python中,spam、SPAM、Spam和sPAM是4个不同的变量。它们每一个都包含自己的不同的值。在程序中使用字母相同而大小写不同的变量,这不是一个好主意。应该为变量使用具有描述性的名称。</p><p>变量名通常是小写的。如果变量名中有多个单词,第一个单词之后的每一个单词的首字母都要大写。这会使得代码更容易阅读。例如,变量名whatIHadForBreakfastThisMorning要比whatihadforbreakfastthismorning更容易阅读。这是一种惯例:你也可以不这么做,但是在Python编程中,这是标准的做法。</p><p>简短的变量名称比冗长的变量名称更好:breakfast或者foodThisMorning,要比whatIHadForBreakfastThisMorning更容易阅读。</p><p>本书中的交互式shell示例,都使用像spam、eggs、ham和bacon这样的变量名。这是因为在这些示例中,变量名并不重要。然而,本书中的程序都使用具有描述性的名称。你的程序也应该使用具有描述性的变量名。3.9 本章小结</p><p>一旦学习了字符串和函数,就可以开始编写与用户交互的程序了。这很重要,因为文本是用户和计算机彼此通信的主要方式。使用input()函数,用户通过键盘输入文本。使用print()函数,计算机把文本显示到屏幕上。</p><p>字符串只是一种具有新的数据类型的值。任何值都有一种数据类型,在Python中,有许多的数据类型。+操作符可以连接字符串。</p><p>函数可以用做程序的一部分,以执行一些复杂的指令。Python有许多内建函数,我们会在本书中介绍它们。在表达式中,在可以使用值的任何位置,也都可以使用函数调用。</p><p>在程序中,把Python当前所处的指令叫做执行。在下一章中,我们将介绍使得执行移动的更多的方式,而不只是直接从上向下执行。一旦我们掌握了这些知识,就为创建游戏做好了准备。第4章“猜数字”游戏</p><p>本章主要内容:● import语句;● 模块;● while语句;● 条件;● 语句块;● 比较操作符;● =和==的区别;● if语句;● 关键字break;● str()函数、int()函数和float()函数;● random.randint()函数。</p><p>在本章中,我们准备编写一个叫做“猜数字”的游戏。计算机想到一个1到20之间的随机数,让你来猜它是几。计算机会告诉你每次猜的数太大还是太小。如果能够在6次之内猜到正确的数字,就赢得游戏。</p><p>这是一个进行编程练习的很好的游戏,因为在一个小程序中,用到了随机数字、循环和用户输入。我们已经介绍过如何把值转换成不同的数据类型,以及为什么需要这么做。因为这个程序是一个游戏,所以我们会把用户称为玩家,但是称为“用户”也没有问题。4.1 “猜数字”游戏的运行示例</p><p>如下是玩家运行程序时的样子。玩家输入的文本用粗体表示。Hello! What is your name? Albert Well, Albert, I am thinking of a number between 1 and 20. Take a guess. 10 Your guess is too high. Take a guess. 2 Your guess is too low. Take a guess. 4Good job, Albert! You guessed my number in 3 guesses! 4.2 “猜数字”游戏的源代码</p><p>通过点击FileNew Window打开一个新的文件编辑器窗口。在出现的空白窗口中,输入源代码,并且把它保存为guess.py。然后按下F5键来运行程序。当在文件编辑器中输入代码时,要留意一些代码行前面的空格。有些行有4个或者8个缩进空格。</p><p>请注意!本书中的程序只能在Python 3中运行,而在Python 2中</p><p>则无法运行。当开启IDLE窗口时,它会在顶端显示类似于“Python 3.4.2”的信息。如果你已经安装了Python 2,也可</p><p>以同时安装Python 3。请通过https://python.org/download/下</p><p>载Python 3。</p><p>如果输入这些代码之后出现错误,请使用在http://invpy.com/diff/guess 的在线diff工具,对比你输入的代码和本书代码。guess.py 1. # This is a guess the number game.2. import random 3. 4. guessesTaken = 0 5. 6. print('Hello! What is your name?') 7. myName = input() 8. 9. number = random.randint(1, 20) 10. print('Well, ' + myName + ', I am thinking of a number between 1 and 20.') 11. 12. while guessesTaken < 6: 13. print('Take a guess.') # There are four spaces in front of print. 14. guess = input() 15. guess = int(guess) 16. 17. guessesTaken = guessesTaken + 1 18. 19. if guess < number: 20. print('Your guess is too low.') # There are eight spaces in front of print. 21. 22. if guess > number: 23. print('Your guess is too high.') 24. 25. if guess == number: 26. break 27. 28. if guess == number: 29. guessesTaken = str(guessesTaken) 30. print('Good job, ' + myName + '! You guessed my number in ' + guessesTaken + ' guesses!') 31. 32. if guess != number: 33. number = str(number) 34. print('Nope. The number I was thinking of was ' + number)4.3 import语句1.# This is a guess the number game.2. import random</p><p>第1行是一条注释。记住,Python会忽略掉#号后边的所有内容。注释只是提醒我们程序要做什么。</p><p>第2行是一条import语句。记住,语句是执行某些动作的指令,而不像表达式那样会计算为一个值。我们已经见过语句了,例如把一个值存储到一个变量中的赋值语句。</p><p>Python包含许多内建的函数,有些函数存在于称为模块的单独的程序中。可以使用一条import语句把它们的模块导入到你的程序中,这样就可以使用这些函数了。</p><p>第2行导入了名为random的模块,以便程序可以调用random.randint()函数。这个函数将产生一个随机数字,供用户进行猜测。4. guessesTaken = 0</p><p>第4行创建了一个名为guessesTaken的新变量。我们将把玩家猜过的次数保存到这个变量中。因为此时玩家还没有做过任何猜测,所以这里保存的是整数0。6. print('Hello! What is your name?') 7. myName = input()</p><p>第6行和第7行与我们在第3章的Hello World程序中见到的代码行一样。程序员经常复用其他程序中的代码,以减少自己的工作量。</p><p>第6行是对print()函数的一次调用。请记住,函数就像是程序中的一个小程序。当程序调用一个函数时,它会运行这个小程序。print()函数中的代码把传递给它的字符串参数显示到屏幕上。</p><p>第7行要求用户输入姓名,并且将输入存储到myName变量中(记住,这个字符串可能并不是玩家的真实姓名。它可能只是玩家输入的任意字符串。计算机则只会无条件地执行指令)。4.4 random.randint()函数9. number = random.randint(1, 20)</p><p>第9行调用了一个名为randint()的新函数,并且把返回值存储到了变量number中。记住,函数调用可以是表达式的一部分,因为函数调用也会求得一个值。</p><p>randint()函数是由random模块提供的,所以在它前边要加上random.(别漏掉那个点),这用来告知Python,randint()是random模块中的函数。</p><p>randint()函数会返回一个随机的整数,该整数在接收到的两个整数参数之间(也包括这两个整数)。第9行把1和20传入到函数名称后边的圆括号中,两个数之间用逗号隔开。把randint()返回的随机整数存储到名为number的变量中,这就是玩家试图猜测的神秘数字。</p><p>稍等片刻,回到交互式shell,并且输入import random,以导入random模块。然后输入random.randint(1, 20),查看这个函数调用的结果。它会返回1到20之间的一个整数。再输一次这行代码,函数调用会返回一个不同的整数。randint()函数每次返回一个随机的整数,就像每次掷色子都会得到一个随机数字一样:>>> import random >>> random.randint(1, 20) 12 >>> random.randint(1, 20) 18 >>> random.randint(1, 20) 3 >>> random.randint(1, 20) 18 >>> random.randint(1, 20) 7</p><p>当你想要为游戏增加随机性时,使用randint()函数。在许多游戏中,都会用到随机性(想想看,那么多的桌上游戏要使用色子)。</p><p>也可以通过修改参数,来尝试不同范围的数字。例如,输入random.randint(1, 4),只会得到1到4之间的整数(包含1和4)。或者尝试random.randint(1000, 2000),来获取1000到2000之间的整数。</p><p>例如,在交互式shell中输入下面的语句。当调用random.randint()函数时,所得到的结果可能是不同的(毕竟它是随机的)。>>> random.randint(1, 4) 3 >>> random.randint(1000, 2000) 1294</p><p>对游戏代码稍作修改,就可以使得游戏行为有所不同。尝试把第9行和第10行的内容:9. number = random.randint(1, 20) 10. print('Well, ' + name + ', I am thinking of a number between 1 and 20.')</p><p>修改为如下所示:9. number = random.randint(1, 100) 10. print('Well, ' + name + ', I am thinking of a number between 1 and 100.')</p><p>现在计算机将会考虑1到100之间的一个整数,而不是1到20之间的一个整数。第9行的改动将会改变随机数字的范围,但是要记住还要修改第10行,以便让游戏告诉玩家新的数字范围而不是旧的范围。欢迎玩家10. print('Well, ' + myName + ', I am thinking of a number between 1 and 20.')</p><p>第10行的print()函数根据姓名来欢迎玩家,并且告诉他们计算机所考虑的数字范围。</p><p>在第10行的代码中,看上去好像不是1个字符串参数,但是仔细看这一行。加号把3个字符串连接成1个字符串。最终,只有1个字符串作为参数传递给了print()函数。如果再看一下,会看到引号中的逗号以及各个部分的字符串。4.5 循环12. while guessesTaken < 6:</p><p>第12行是一条while语句,它表示while循环的开始。循环可以一遍遍地重复执行代码。然而在学习循环之前,我们需要先学习一些其他的概念,包括语句块、布尔值、比较操作符、条件和while语句。4.6 语句块</p><p>可以把许多代码行组织到一个语句块中。语句块中的每一行代码都有相同的、最小数量的缩进。可以通过查看代码行前面的空格数,来判断语句块的起始和结束。这就是代码行的缩进。</p><p>当代码行的缩进增加时(通常是增加4个空格),就开始了一个语句块。接下来任何也缩进4个空格的代码行,都是这个语句块的一部分。当有一行代码和该语句块开始之前的缩进相同,那么,这个语句块就结束了。这意味着,语句块可以嵌套在其他已有的语句块之中。图4-1所示的代码中,我们将一个语句块标记出来并进行编号。

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

下载完整电子书


相关推荐

最新文章


© 2020 txtepub下载