Python/变量和字符串
本节介绍 Python 中两种不同的数据类型——变量和字符串。请运行以下程序片段,并对照其输出结果学习。如果你的 Python 版本和此处的代码不符,可单击“Python 2.x”或“Python 3.x”旁边的“切换”来选择不同版本。
变量
[编辑]变量是一个可能会发生改变的值。简而言之,变量像一个盒子,可以往里装任何东西。现在我们只研究把数字放在里面的情形,例如:
lucky = 7
print(lucky)
在这个程序中,我们把 lucky 赋值为7。然后,Python 在屏幕中打印出 lucky 的数值。
现在,我们来试着改变变量的值:
changing = 3
print(changing)
changing = 9
print(changing)
different = 12
print(different)
print(changing)
changing = 15
print(changing)
在这个程序中,我们定义一个变量changing
, 把它赋值为 3
,然后让 Python 告诉我们changing
是多少。接着我们让changing
把它赋值为9
,再问问 Python 现在changing
等于多少。 Python 把原来的3
丢掉,换成了9
,所以它告诉我们现在changing
等于9
。接下来,我们构造了第二个变量,将其命名为different
,并给它赋值12
。接下来问 Python different
和changing
各是多少,它告诉我们分别是12
和9
。因此,一个变量改变时任何其他的变量都不会受影响。变量改变时,它会丢弃原先的值而留下新的值,例如接下来我们把changing
再次赋值为15
(原来是9
),那么9
被丢弃了, Python 告诉我们现在changing
等于15
。
你也可以把另一变量的值赋给一个变量,例如:
red = 5
blue = 10
print(red, blue)
yellow = red
print(yellow, red, blue)
red = blue
print(yellow, red, blue)
这个程序稍微复杂了些。请记住,我们永远把变量名写在赋值号(=)左边,值写在赋值号右边——先名后值。
首先我们令red
为5
,blue
为10
。第三行中我们用逗号分隔,一次性在屏幕上打印两个变量,其间会用一个空格分隔。所以, Python 输出了5 10
,也就是说red
等于5
,blue
等于10
。 现在,我们构造第三个变量yellow
,然后让 yellow
的值等于 red
的值(再回忆一遍:变量名在左边,值在右边) 。Python 知道 red
等于 5
,所以它就让 yellow
也等于 5
。最后我们让 Python 告诉我们三个变量的值: yellow
为 5
、 red
为 5
、 blue
仍为 10
。
接着我们来把 red
设为 blue
的值。别弄混了——变量名在左边,值在右边。 Python 记得 blue
的值等于 10
,于是就把 red
原先的值(5
)丢弃,换成了 blue
的值。最后, Python 输出三个变量的值: yellow
为 5
、 red
为 10
、 blue
为 10
。
但我们之前(代码第5行)不是让 yellow
等于 red
的值了吗?事实上, red
变为 10
时 yellow
仍为 5
,这是因为 yellow
只是在我们让它等于 red
时才关心后者的值。在这之后,它们就没什么关系了。 yellow
的值并不会影响 red
的值,反之亦然。
关于变量的内容,目前了解这些就足够了,我们在之后还会回过头来更深入地讨论。一定要记住(这是第四遍了):当你给变量赋值时,把变量名写在赋值号左边,值写在赋值号右边。
字符串
[编辑]字符串就是一串按顺序排列的字符。凡是你能用键盘在屏幕上打出来的都称为字符,比如汉字、字母、数字、空格。例如,"hello
"就是一个字符串,它的长度是5—— h
、 e
、 l
、 l
、 o
。字符串里也可以有空格:"hello world
"包含11个字符,其中有一个是"hello
" 和 "world
"之间的空格。字符串的长度没有上限——你可以构造只有一个字符的字符串,也可以构造长度为一百万的字符串。字符串的长度也可以是0,我们叫它“空字符串”。
在 Python 中有三种方法构造一个字符串:单引号('
)、双引号("
)、三个双引号("""
),在字符串前后加上其中任何一个(但必须统一,例如不能前面用单引号后面用双引号)即可。例如:
>>> print('I am a single quoted string')
I am a single quoted string
>>> print("I am a double quoted string")
I am a double quoted string
>>> print("""I am a triple quoted string""")
I am a triple quoted string
如果字符串中需要用到引号,你可以在它前面加上一个反斜杠(\),让 Python 知道这不是字符串的末尾,而是一个普通的字符。我们把反斜杠称为转义符。如果字符串中需要用到反斜杠,也一样把反斜杠转义即可,即在它前面再加一个反斜杠:
>>> print("So I said, \"You don't know me! You'll never understand me!\"")
So I said, "You don't know me! You'll never understand me!"
>>> print('So I said, "You don\'t know me! You\'ll never understand me!"')
So I said, "You don't know me! You'll never understand me!"
>>> print("This will result in only three backslashes: \\ \\ \\")
This will result in only three backslashes: \ \ \
接着我们用简单的程序做示范,来讨论字符串的运算。
print("Hello, world!")
这不就是我们一开始写的程序吗?可见,当初我们其实已经用到了字符串。你可以把两个字符串用 +
拼接起来:
>>> print("Hello, " + "world!")
Hello, world!
注意第一个字符串末尾有一个空格。如果你忘记加上它的话,两个字符串就会紧挨在一起,得到 Hello,world!
你也可以用 *
来复制字符串若干次,如:
>>> print("bouncy, " * 10)
bouncy, bouncy, bouncy, bouncy, bouncy, bouncy, bouncy, bouncy, bouncy, bouncy,
如果你想知道字符串的长度是多少,可以用 len()
函数(len
是英文length的缩写),它接收一个字符串做参数,返回字符串的长度。把字符串放在括号中即可:
>>> print(len("Hello, world!"))
13
字符串和变量
[编辑]现在我们学习了字符串和变量两个概念,接下来把它们综合起来。
变量不仅能储存数字,还可以储存字符串:
question = "What did you have for lunch?"
print(question)
这个程序中,我们构造了一个变量 question
,并令它等于字符串 "What did you have for lunch?
" 。接着,我们让 Python 打印变量 question
的值。注意,这里 question
两端没有引号,这表示我们引用的是变量而不是字符串。假如在 question
两端加上双引号,Python就会把它当成字符串并输出 question
,而不是 What did you have for lunch?
。
接着试试别的。现在我们问了用户问题,却不能让用户回答。所以我们改改程序,让用户可以输入他中午吃了什么:
Python 3.xPython 2.x - 切换
question = "What did you have for lunch?"
print(question)
answer = input()
print("You had " + answer + "! That sounds delicious!")
为了使用户能够输入字符串,我们在 Python 2.x 下调用了 raw_input()
函数,在 Python 3.x 下则是 input()
函数;该函数能接受用户输入,等用户按下回车时便返回输入的字符串。别忘了在函数名最后加上一对括号!虽然括号内什么也没有,但这对括号必须要加,否则 Python 会告诉你代码出错了。Python 2.x 下也有 input()
函数,它与 raw_input()
函数有一些区别,我们以后会讨论。Python 3.x 则把两个函数统一成了 input()
。
在这个程序中,我们建立了变量 answer
,并把用户输入的字符串放入其中。接下来,我们输出一个新字符串,由字符串"You had
" 开头,接着是 answer
(其中为用户输入的内容),最后是字符串"! That sounds delicious!
"。如上文所述,用加号+
把字符串连接起来。
连接数字与字符串
[编辑]看看以下程序,你能猜出它是干什么的吗?
Python 3.xPython 2.x - 切换
print("Please give me a number: ")
number = input()
plusTen = number + 10
print("If we add 10 to your number, we get " + plusTen)
嗯,也许你会说这个程序让用户输入一个数字,然后把它加上10,并输出结果。那么试着运行一下吧——没想到它竟然报错了!输入数字后,你应该会看到以下错误信息(test.py为程序的文件名,可能与你看到的不相同):
Python 3.xPython 2.x - 切换
Traceback (most recent call last):
File "test.py", line 4, in <module>
plusTen = number + 10
TypeError: must be str, not int
为什么?Python 告诉我们这是一个 TypeError
(类型错误)。具体来说,Python 不知道怎么把两个不同类型(字符串和数字)的变量拼接起来。在这里, Python 认为 number
变量存储的是一个字符串而不是数字。例如用户输入 15
以后, number
等于一个长度为2的字符串:第一位是 1
,第二位是 5
。那么我们怎么告诉 Python 在这里 15
应该是数字而非字符串呢?
答案很简单,我们有两个函数可以转换字符串和数字。 int()
函数接收一个字符串,把它转换为数字; str()
函数接收一个数字,把它转换为字符串。想调用这两个函数时,我们只要把参数用括号括起来即可。那么像这样修改程序:
Python 3.xPython 2.x - 切换
print("Please give me a number: ")
response = input()
number = int(response)
plusTen = number + 10
print("If we add 10 to your number, we get " + str(plusTen))
本节内容到此为止。我们在之后的课程会系统地讨论 Python 的各种类型。
函数回顾
[编辑]input()
或raw_input()
:等待用户输入,返回用户输入字符串。len()
:返回输入字符串的长度(字符的个数)str()
:将输入变量转为字符串int()
:将输入变量转为数字
习题
[编辑]- 写一个程序,让用户输入一个字符串,并在屏幕上打印该字符串的长度。
- 写一个程序,让用户输入一个字符串s和一个数字n。在屏幕上打印n次字符串s。(例如输入的字符串是
hello
,数字是3
,则应输出hellohellohello
。) - 如果程序让用户输入一个数字,用户却输入了字符串,会发生什么事?写个程序尝试一下。用你现在所学的知识,能否解释为什么会发生这些事?