python基础--2变量表达式和语句

2.1. 值和数据类型
值是程序操纵的基本事物之一,如字母或数字。到目前为止,我们看到的值是2(当我们添加1 + 1时的结果)和“Hello,World!

这些值属于不同的数据类型:2 是整数,“Hello, World!” 是一个字符串,之所以这样称呼,是因为它包含一串字母。您(和解释器)可以识别字符串,因为它们用引号引起来。

print 语句也适用于整数。

>>> print 4
4

如果您不确定值的类型,解释器可以告诉您。

>>> type("Hello, World!")
<type 'str'>
>>> type(17)
<type 'int'>

毫不奇怪,字符串属于类型 str,整数属于 int 类型。不太明显的是,带有小数点的数字属于称为浮点数的类型,因为这些数字以称为浮点数的格式表示。

>>> type(3.2)
<type 'float'>

像“17”和“3.2”这样的值呢?它们看起来像数字,但它们像字符串一样用引号括起来。

>>> type("17")
<type 'str'>
>>> type("3.2")
<type 'str'>

它们是字符串。

Python 中的字符串可以括在单引号 (') 或双引号 (“) 中:

>>> type('This is a string.')
<type 'str'>
>>> type("And so is this.")
<type 'str'>

双引号字符串可以包含单引号,如“Bruce’s beard”,单引号字符串可以包含双引号,如“ 说”Ni!”

键入大整数时,可能会在三位数字组之间使用逗号,如 1,000,000。这在Python中不是一个合法的整数,但它是合法的:

>>> print 1,000,000
1 0 0

好吧,这根本不是我们所期望的!Python 将 1,000,000 解释为要打印的三个项目的列表。因此,请记住不要在整数中放置逗号。

2.2. 变量
编程语言最强大的功能之一是能够操作变量。变量是引用值的名称。

赋值语句创建新变量并为其赋值:

>>> message = "What's up, Doc?"
>>> n = 17
>>> pi = 3.14159

此示例执行三个赋值。第一个将字符串“怎么了,Doc?”分配给一个名为 message 的新变量。第二个给出整数 17 到 n,第三个给出浮点数 3.14159 到 pi。

赋值运算符 =不应与等号混淆(即使它使用相同的字符)。赋值运算符将运算符左侧的名称与右侧的值链接在一起。这就是为什么如果您输入以下命令,您将收到错误的原因:

>>> 17 = n

在纸上表示变量的常用方法是用指向变量值的箭头来编写名称。这种图被称为状态图,因为它显示了每个变量所处的状态(将其视为变量的心理状态)。下图显示了赋值语句的结果:

State diagram
print 语句也适用于变量。

>>> print message
What's up, Doc?
>>> print n
17
>>> print pi
3.14159

在每种情况下,结果都是变量的值。变量也有类型;同样,我们可以问口译员他们是什么。

>>> type(message)
<type 'str'>
>>> type(n)
<type 'int'>
>>> type(pi)
<type 'float'>

变量的类型是它所引用的值的类型。

2.3. 变量名称和关键字
程序员通常为他们的变量选择有意义的名称 - 他们记录变量的用途。

变量名称可以任意长。它们可以同时包含字母和数字,但它们必须以字母开头。虽然使用大写字母是合法的,但按照惯例,我们不会这样做。如果您这样做,请记住,这种情况很重要。布鲁斯和布鲁斯是不同的变量。

下划线字符 ( _) 可以出现在名称中。它通常用于具有多个单词的名称,例如my_name或price_of_tea_in_china。

如果为变量指定非法名称,则会收到语法错误:

>>> 76trombones = "big parade"
SyntaxError: invalid syntax
>>> more$ = 1000000
SyntaxError: invalid syntax
>>> class = "Computer Science 101"
SyntaxError: invalid syntax

76长号是非法的,因为它不以字母开头。more$是非法的,因为它包含一个非法字符,即美元符号。但是上课有什么问题呢?

事实证明,类是Python关键字之一。关键字定义了语言的规则和结构,它们不能用作变量名称。

Python有31个关键词:

>>> keyword.kwlist
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 

'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print',

 'raise', 'return', 'try', 'while', 'with', 'yield']

您可能希望将此列表放在手边。如果解释器抱怨您的某个变量名称,而您不知道原因,请查看它是否在此列表中。

2.4. 声明
语句是 Python 解释器可以执行的指令。我们已经看到了两种说法:印刷和分配。

在命令行上键入语句时,Python 会执行该语句并显示结果(如果有)。打印语句的结果是一个值。赋值语句不产生结果。

脚本通常包含一系列语句。如果有多个语句,则在执行语句时,结果一次显示一个。

例如,脚本

print 1
x = 2
print x

产生输出:

1
2
同样,赋值语句不生成任何输出。

2.5. 计算表达式
表达式是值、变量和运算符的组合。如果在命令行上键入表达式,解释器将计算该表达式并显示结果:

>>> 1 + 1
2

表达式的计算会生成一个值,这就是表达式可以出现在赋值语句右侧的原因。值本身就是一个简单的表达式,变量也是如此。

>>> 17
17
>>> x
2

令人困惑的是,计算表达式与打印值并不完全相同。

>>> message = "What's up, Doc?"
>>> message
"What's up, Doc?"
>>> print message
What's up, Doc?

当 Python shell 显示表达式的值时,它使用的格式与输入值的格式相同。对于字符串,这意味着它包含引号。但 print 语句打印表达式的值,在本例中为字符串的内容。

在脚本中,表达式本身就是一个法律声明,但它不做任何事情。脚本

17
3.2
"Hello, World!"
1 + 1

根本不产生任何输出。如何更改脚本以显示这四个表达式的值?

2.6. 运算符和操作数
运算符是表示加法和乘法等计算的特殊符号。运算符使用的值称为操作数。

以下是所有合法的Python表达式,其含义或多或少是明确的:

20+32   hour-1   hour*60+minute   minute/60   5**2   (5+9)*(15-7)

符号 +、-和 /,以及使用括号进行分组,在 Python 中的含义是它们在数学中的含义。星号 (*) 是乘法的符号,** 是幂的符号。

当变量名称出现在操作数的位置时,在执行操作之前,该变量名将替换为其值。

加法、减法、乘法和幂都符合你的预期,但你可能会对除法感到惊讶。以下操作会产生意外结果:

>>> minute = 59
>>> minute/60
0

分钟的值为 59,59 除以 60 为 0.98333,而不是 0。出现这种差异的原因是Python正在执行整数除法。

当两个操作数都是整数时,结果也必须是整数,并且按照惯例,整数除法始终向下舍入,即使在这样的情况下,下一个整数非常接近。

这个问题的可能解决方案是计算百分比而不是分数:

>>> minute*100/60
98

结果再次向下舍入,但至少现在答案大致正确。另一种选择是使用浮点除法。我们将在第 4 章中看到如何将整数值和变量转换为浮点值。

2.7. 操作顺序
当表达式中出现多个运算符时,计算顺序取决于优先规则。Python的数学运算符遵循与数学相同的优先规则。首字母缩略词PEMDAS是记住操作顺序的有用方法:

Parenthes 具有最高的优先级,可用于强制表达式按所需顺序计算。由于首先计算括号中的表达式,因此 2 * (3-1) 为 4,(1+1)(5-2) 为 8。您还可以使用括号使表达式更易于阅读,如 (minute * 100) / 60,即使它不会更改结果。
Exponentiation 具有第二高的优先级,因此 2
1+1 是 3 而不是 4,31**3 是 3 而不是 27。
多重和 Division 具有相同的优先级,这高于 Addition 和 Subtraction,后者也具有相同的优先级。因此,2
3-1 产生 5 而不是 4,而 2/3-1 是 -1,而不是 1(请记住,在整数除法中,2/3=0)。
具有相同优先级的运算符从左到右进行计算。因此,在表达式 minute100/60 中,乘法首先发生,产生 5900/60,再生成 98。如果从右到左评估操作,则结果将为 591,即 59,这是错误的。
2.8. 字符串操作
通常,不能对字符串执行数学运算,即使字符串看起来像数字也是如此。以下内容是非法的(假设该消息具有类型字符串):

message-1   "Hello"/123   message*"Hello"   "15"+2

有趣的是,+ 运算符确实适用于字符串,尽管它并不完全符合您的期望。对于字符串,+ 运算符表示串联,这意味着通过端到端链接两个操作数来连接它们。例如:

fruit = "banana"
baked_good = " nut bread"
print fruit + baked_good

该程序的输出是香蕉坚果面包。单词 nut 之前的空格是字符串的一部分,并且是在串联的字符串之间生成空格所必需的。

  • 运算符也适用于字符串;它执行重复。例如,“Fun”*3 就是 “FunFunFun”。其中一个操作数必须是字符串;另一个必须是整数。

一方面,这种对+和的解释通过与加法和乘法的类比是有意义的。正如43相当于4+4+4一样,我们期望“Fun”*3和“Fun”+“Fun”一样,事实也的确如此。另一方面,字符串串联和重复与整数加法和乘法有很大不同。你能想到一个属性,加法和乘法有字符串串联和重复没有的属性吗?

2.9. 输入
Python 中有两个内置函数用于获取键盘输入:

n = raw_input("Please enter your name: ")
print n
n = input("Enter a numerical expression: ")
print n

此脚本的示例运行将如下所示:

$ python tryinput.py
Please enter your name: Arthur, King of the Britons
Arthur, King of the Britons
Enter a numerical expression: 7 * 3
21

这些函数中的每一个都允许在括号之间为函数提供提示。

2.10. 组成
到目前为止,我们已经孤立地研究了程序的元素-变量,表达式和语句,而没有讨论如何组合它们。

编程语言最有用的功能之一是它们能够采用小的构建块并编写它们。例如,我们知道如何添加数字,我们知道如何打印;事实证明,我们可以同时做这两件事:

>>>  print 17 + 3
20

实际上,添加必须在打印之前发生,因此这些操作实际上不会同时发生。关键是任何涉及数字、字符串和变量的表达式都可以在 print 语句中使用。您已经看到了一个示例:

print "Number of minutes since midnight: ", hour*60+minute

您还可以将任意表达式放在赋值语句的右侧:

percentage = (minute * 100) / 60

这种能力现在可能看起来并不令人印象深刻,但你会看到其他例子,其中组合可以整齐而简洁地表达复杂的计算。

警告:使用某些表达式的位置有限制。例如,赋值语句的左侧必须是变量名称,而不是表达式。因此,以下情况是非法的:分钟+1 = 小时。
2.11. 评论
随着程序变得越来越大,越来越复杂,它们变得越来越难以阅读。形式语言是密集的,通常很难查看一段代码并弄清楚它在做什么,或者为什么。

因此,最好在程序中添加注释,以自然语言解释程序正在执行的操作。这些注释称为注释,并用 # 符号标记:

#计算已经过去的小时百分比

percentage = (minute * 100) / 60

在这种情况下,注释将单独出现在一行上。您还可以将注释放在行尾:

percentage = (minute * 100) / 60     # caution: integer division

从 # 到行尾的所有内容都将被忽略 — 它对程序没有影响。该消息适用于程序员或将来可能使用此代码的程序员。在这种情况下,它提醒读者整数除法的惊人行为。

2.12. 词汇表
赋值运算符
=是 Python 的赋值运算符,不应与使用相同符号的数学比较运算符混淆。
赋值语句
为名称(变量)赋值的语句。赋值运算符的左侧 =是一个名称。赋值运算符的右侧是一个表达式,该表达式由 Python 解释器计算,然后分配给该名称。赋值语句的左右两侧之间的差异经常让新程序员感到困惑。在以下作业中:

n = n + 1

n 在 = 的每一侧都扮演着非常不同的角色。在右侧,它是一个值,并构成了表达式的一部分,在将其分配给左侧的名称之前,Python解释器将对其进行计算。

评论
程序中的信息是供其他程序员(或任何阅读源代码的人)使用的,并且对程序的执行没有影响。
组成
能够将简单表达式和语句组合成复合语句和表达式,以便简洁地表示复杂计算。
连接
端到端联接两个字符串。
数据类型
一组值。值的类型决定了如何在表达式中使用它。到目前为止,您看到的类型是整数(类型 int)、浮点数(类型 float)和字符串(类型 str)。
评价
通过执行操作来简化表达式,以便生成单个值。
表达
变量、运算符和值的组合,表示单个结果值。

一种存储浮点数的 Python 数据类型。浮点数在内部存储为两部分:基数和指数。以标准格式打印时,它们看起来像十进制数。使用浮点数时要注意舍入错误,并记住它们只是近似值。
int
一种包含正整数和负整数的 Python 数据类型。
整数除法
将一个整数除以另一个整数并生成整数的运算。整数除法仅生成分子可被分母整除的整数次,并丢弃任何余数。
关键词
编译器用于解析程序的保留字;您不能将 if、def 和 while 等关键字用作变量名称。
操作数
运算符操作所基于的值之一。
算子
表示简单计算(如加法、乘法或字符串串联)的特殊符号。
优先规则
控制涉及多个运算符和操作数的表达式的计算顺序的规则集。
状态图
一组变量及其所引用的值的图形表示形式。
陈述
Python 解释器可以执行的指令。语句的示例包括赋值语句和 print 语句。
str
保存字符串的 Python 数据类型。
价值
可以存储在变量中或在表达式中计算的数字或字符串(或稍后命名的其他内容)。
变量
引用值的名称。
变量名
变量的名称。Python中的变量名称由一系列字母(a…z, A…Z 和 _) 以及以字母开头的数字 (0…9)。在最佳编程实践中,应选择变量名称,以便它们描述它们在程序中的用法,从而使程序自文档化。
2.13. 练习
记录打印作业报表时发生的情况:

>>> print n = 7

怎么样?

>>> print 7 + 5

还是这个?

>>> print 5.2, "this", 4 - 2, "that", 5/2.0

您能想到一个可以遵循打印语句的一般规则吗?打印语句返回什么?

就拿这句话来说:所有的工作和没有玩耍使杰克成为一个沉闷的男孩。将每个单词存储在单独的变量中,然后使用 print 将句子打印在一行上。

向表达式 6 * 1 - 2 添加括号,以将其值从 4 更改为 -6。

在以前有效的代码行之前放置注释,并记录重新运行程序时发生的情况。

输入和raw_input之间的区别在于,输入计算输入字符串,而raw_input不计算输入字符串。在解释器中尝试以下操作并记录发生的情况:

>>> x = input()
3.14
>>> type(x)
>>> x = raw_input()
3.14
>>> type(x)
>>> x = input()
'The knights who say "ni!"'
>>> x

如果您尝试上面的示例而不带引号,会发生什么情况?

>>> x = input()
The knights who say "ni!"
>>> x
>>> x = raw_input()
'The knights who say "ni!"'
>>> x

描述和解释每个结果。

启动 Python 解释器,并在提示符下输入 bruce + 4。这将给您一个错误:

NameError: name ‘bruce’ is not defined
为 bruce 分配一个值,以便 bruce + 4 的计算结果为 10。

编写一个名为 madlib.py 的程序(Python脚本),该程序要求用户输入一系列名词,动词,形容词,副词,复数名词,过去时态动词等,然后生成一个语法正确但在语义上荒谬的段落(参见 http://madlibs.org 示例)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值