第1章 交互式Shell

第1章 交互式Shell

在开始编写游戏之前,我们需要学习一些基本的编程概念。在本章中,我们首先学习如何使用Python的交互式Shell以及进行基本的算术运算。

本章主要内容

  • 操作符;
  • 整数和浮点数;
  • 值;
  • 表达式;
  • 语法错误;
  • 在变量中存储值。

1.1 一些简单的数学知识

按照前言中介绍的步骤打开IDLE。首先,我们将使用Python来解决一些简单的数学问题。

交互式shell可以像计算器一样工作。在交互式shell的>>>提示符之后,输入2+2,然后按下回车键(有些键盘上显示为RETURN键)。图1-1展示了这个数学问题在交互式shell中的样子,注意,它给出的响应是数字4。

G:\yds\17-0509\tu\0101.tif

图1-1 在交互式shell中输入2+2

这道数学题就是一个简单的编程指令。加号(+)告诉计算机把数字2和2相加。计算机这么做了,并且在下一行中用数字4作为响应。表1-1列出了Python中其他可用的数学符号。

表1-1 Python中的各种数学操作符

操作符

运算

+

加法

减法

*

乘法

/

除法

减号(−)是数字相减。乘号(*)是数字相乘。除号(/)是数字相除。当以这种方式使用时,+、−、*和/叫做操作符(operator)。操作符告诉Python要对它们旁边的数字进行何种运算。

1.1.1 整数和浮点数

整数(integer)就是诸如4、99或者0这样的完整的数。浮点数(简写为float)就是诸如3.5、42.1或者5.0这样的分数或小数。在Python中,数字5是整数,但是5.0是浮点数。

这些数字都称为值(value)(稍后,我们将介绍数字以外的其他的值)。在刚才我们在shell中输入的数学问题中,两个2都是整数值。

1.1.2 表达式

数学题2 + 2就是表达式(expression)的一个例子。如图1-2所示,表达式是由操作符(数学符号)所连接起来的值(数字)组成的,它会产生可供代码使用的一个新的值。

G:\yds\17-0509\tu\0102.tif

图1-2 表达式由值和操作符组成

计算机可以在几秒钟之内解决数百万道这样的数学题。

尝试在交互式shell中输入一些这样的数学问题,每输入完一道题后按一下回车键。

>>> 2+2+2+2+2
10
>>> 8*6
48
>>> 10-5+6
11
>>> 2 +        2
4

这些表达式看上去都像是常规的数学公式,但是注意2+2的示例中的所有的空格。在Python中,在值和操作符之间可以添加任意多个空格。然而,当把指令输入到交互式shell中时,必须总是从一行的开头开始执行(即指令之前不能有空格)。

1.2 计算表达式

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

当Python计算一个表达式的时候,它就像你在做数学题的时候一样,按照顺序进行操作。有如下的几条规则:

  • 位于括号之中的表达式部分先计算;
  • 乘法和除法在加法和减法之前计算;
  • 从左向右进行计算。

表达式1 + 2 * 3 + 4的计算结果是11,而不是13,因为先计算2 * 3。如果表达式是(1 + 2)*(3 + 4),那么将会计算为21。因为(1 + 2)和(3 + 4)位于括号之中,它们会在乘法之前计算。

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

G:\yds\17-0509\1j\p004.tif

即便是计算机会执行所有这些步骤,我们在交互式shell中也看不到所有这些步骤。交互式shell只是把结果展示给我们。

>>>  8 * 3 / 2 + 2 + 7 - 9
12.0

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

1.3 语法错误

如果在交互式shell中输入5+,将会得到如下的一条错误消息。

>>> 5 +
SyntaxError: invalid syntax

之所以会产生这个错误,是因为5+不是一个表达式。表达式通过操作符来连接值,因此加法操作符+期待在其前面和后边都有一个值。当漏掉了期待的值的时候,就会出现一条错误消息。

SyntaxError表示Python不理解这条指令,因为你的输入不正确。计算机编程并不只是告诉计算机要做什么,还要知道如何正确地向计算机传达指令。

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

1.4 在变量中存储值

当表达式计算为一个值的时候,我们可以把这个值存储到变量中,以便在后面可以使用它。我们把变量当做是一个可以保存值的盒子。

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

>>> spam = 15
>>>

这将把值15存储到spam变量的盒子中,如图1-3所示。

G:\yds\17-0509\2j\0103.tif

图1-3 变量就像是可以容纳值的盒子

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

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

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

一个好的变量名能够描述它所包含的数据。想象一下,你将要搬到一个新房子中,并且将你用来搬家的所有箱子都贴上一个名为“东西(stuff)”的标签。你什么东西也找不到!在本书中,为变量而使用的变量名的例子是spam、eggs和bacon等。

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

>>> spam = 15
>>> spam
15

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

>>> spam = 15
>>> spam + 5
20

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

G:\yds\17-0509\1j\p006.tif

在赋值语句创建变量之前,不能使用该变量。否则,Python将会给出一个NameError错误,因为尚不存在该名称的变量。输错了变量名称也会得到这样一个错误:

>>> spam = 15
>>> spma
Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    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。覆盖的过程如图1-4所示。

G:\yds\17-0509\2j\0104.tif

图1-4 用值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

在这个示例中,我们在第1条语句中给spam赋了一个15的值。在下一条语句中,我们用spam的值加上了5,并且将新的值spam+5赋值给了spam,这个表达式会计算为20。当这么做3次以后,spam的值最终为30。

到目前为止,我们只看到了一个变量,但是,在程序中,你可以根据需要创建任意多个变量。例如,让我们给名为eggsbacon的两个变量分配不同的值,如下所示:

>>> bacon = 10
>>> eggs = 15

现在,变量bacon中是10,变量eggs中是15。每个变量都有自己的盒子,其中拥有其自己的值,如图1-5所示。

G:\yds\17-0509\2j\0105.tif

图1-5 变量“bacon”和变量“eggs”中所存储的值

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

>>> bacon = 10
>>> eggs = 15
>>> spam = bacon + eggs
>>> spam
25

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

1.5 小结

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

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

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

目录

  • 版权
  • 版权声明
  • 内容提要
  • 前言
  • 第1章 交互式Shell
  • 第2章 编写程序
  • 第3章 “猜数字”游戏
  • 第4章 一个讲笑话程序
  • 第5章 Dragon Realm
  • 第6章 使用调试器
  • 第7章 用流程图设计Hangman
  • 第8章 编写Hangman的代码
  • 第9章 Hangman扩展
  • 第10章 Tic Tac Toe
  • 第11章 推理游戏Bagels
  • 第12章 笛卡尔坐标
  • 第13章 Sonar Treasure Hunt游戏
  • 第14章 凯撒密码
  • 第15章 Reversegam游戏
  • 第16章 Reversegam AI模拟
  • 第17章 创建图形
  • 第18章 动画图形
  • 第19章 碰撞检测
  • 第20章 声音和图像
  • 第21章 带有声音和图像的Dodger

相关技术

推荐用户