在本节中,您将了解 Python 中的两种不同型的数据:变量和字符串。请按照提示运行示例程序并查看其输出结果。

变量

变量是用来存储可能会变化的值的东西。简单来说,变量就像一个盒子,你可以把东西放进去。你可以使用变量来存储各种各样的东西,但现在我们先来看如何在变量中存储数字。

lucky = 7
print(lucky)

输出:

7

这段代码创建了一个名为 lucky 的变量,并将整数 7 赋值给它。当我们让 Python 告诉我们 lucky 变量中存储的内容时,它又返回了这个数字。

我们也可以改变变量内部存储的内容。例如:

changing = 3                                   
print(changing)

输出:

3
changing = 9
print(changing)

输出:

9
different = 12
print(different)

输出:

12
print(changing)

输出:

9
changing = 15
print(changing)

输出:

15

我们声明了一个名为 changing 的变量,并把整数 3 存入其中,然后验证赋值是否正确。接着,我们把整数 9 赋值给 changing,并再次查看 changing 变量中存储的内容。Python 丢弃了原先存储的 3,替换成了 9。接下来,我们创建了一个名为 different 的第二个变量,并将 12 存入其中。现在我们有了两个独立的变量 differentchanging,它们存储不同的信息,也就是说,对其中一个赋新值并不会影响另一个变量。

你还可以将一个变量的值赋给另一个变量。例如:

red = 5
blue = 10
print(red, blue)

输出:

5 10
yellow = red
print(yellow, red, blue)

输出:

5 5 10
red = blue
print(yellow, red, blue)

输出:

5 10 10

要理解这段代码,请记住,变量的名字总是写在等号的左侧(赋值运算符),而变量的值则写在等号的右侧。首先是名字,然后是值。

我们首先声明 red 为 5,blue 为 10。正如你所见,你可以通过向 print 传递多个参数来让它在一行上输出多个项,用空格分隔它们。正如预期的那样,Python 报告 red 存储了 5,blue 存储了 10。

接下来,我们创建了一个名为 yellow 的第三个变量。为了设置它的值,我们告诉 Python 让 yellow 等于 red 的值。(记住:名字在左,值在右。)Python 知道 red 的值是 5,所以它也将 yellow 的值设为 5。

现在我们把 red 变量设置为 blue 变量的值。别搞混了 —— 名字在左,值在右。Python 查找 blue 的值,发现它是 10。因此,Python 抛弃了 red 原来的值(5),并将其替换为 10。经过这次赋值后,Python 报告 yellow 为 5,red 为 10,blue 也为 10。

但我们不是说 yellow 应该是 red 的值吗?为什么当 red 为 10 时,yellow 还是 5 呢?原因是我们只说过,在赋值时,yellow 的值应该等于 red 当时的值。赋值后,yellow 不再关心 red 的值了。yellow 已经有了一个值,并且这个值会保持不变,无论 red 后来发生了什么。

注意:

Python 中不同变量之间的相互作用实际上比这里解释的更为复杂。上述示例使用的是整数型,与所有其他 Python 内建的基本数据类型一样;但对于列表和字典(你将在后面遇到这些复杂数据类型)的行为却完全不同。如果你想更详细地了解变量在 Python 中的实际含义,以及它们的型如何影响其行为,可以阅读数据类型章节。然而,当前如果你只是记住以下几点就足够了:每当你声明变量或改变它们的值时,始终将变量的名字写在等号的左侧(赋值运算符),并将你希望赋给它的值写在右侧。

对于变量名,它只能由大小写字母(A-Z,a-z)、数字(0-9)和下划线字符(_)组成,并且名字的第一个字符不能是数字。例如,1abc_#$ad 不是有效的变量名,而 _123a__bc 是有效的变量名。

字符串

'字符串' 就是字符按顺序排列的列表。一个字符是你在键盘上可以通过一个按键输入的任何东西,比如字母、数字或者反斜杠。例如,“hello”就是一个字符串。它有五个字符——h, e, l, l, o。字符串也可以包含空格:“hello world”包含11个字符:10个字母和“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 ("""The double quotation mark (\") is used to indicate direct quotations.""")
The double quotation mark (") is used to indicate direct quotations.

如果你想在字符串中包含反斜杠,你必须转义反斜杠。这样 Python 就知道你想在字符串中包含反斜杠,而不是将其用作转义字符。例如:

>>> print ("This will result in only three backslashes: \\ \\ \\")
This will result in only three backslashes: \ \ \

从上面的示例中可以看到,只有用于引用字符串的特定字符需要被转义,这使得代码更易于阅读。

要了解如何使用字符串,让我们回顾一个你很熟悉的旧程序:

>>> print("Hello, world!")
Hello, world!

看!你从一开始就一直在使用字符串!

你可以使用 + 运算符将两个字符串连接在一起,这称为“连接”字符串。

>>> print ("Hello, " + "world!")
Hello, world!

注意,第一个字符串的末尾有一个空格。如果你不加上这个空格,两个单词会连在一起,结果就变成了 Hello,world!

你也可以使用 * 运算符来重复字符串,像这样:

>>> print ("bouncy " * 5)
bouncy bouncy bouncy bouncy bouncy 
>>> print ("bouncy " * 10)
bouncy bouncy bouncy bouncy bouncy bouncy bouncy bouncy bouncy bouncy

在第一个示例中,字符串 bouncy 被重复了 5 次,在第二个示例中被重复了 10 次。

如果你想知道一个字符串的长度,可以使用 len() 函数,它会简单地接受一个字符串并计算其中的字符数。(len 是“长度”的缩写。)只需将你想要计算长度的字符串放在函数的括号内。例如:

>>> print (len("Hello, world!"))
13

字符串和变量

现在你已经了解了变量和字符串各自的使用方法,接下来我们来看它们是如何一起工作的。

变量不仅仅能存储数字,它们也能用来存储字符串!下面是一个例子:

question = "What did you have for lunch?"
print (question)

输出:

What did you have for lunch?

在这个程序中,我们创建了一个名为 question 的变量,并将字符串 "What did you have for lunch?" 存储在其中。然后,我们只告诉 Python 打印出 question 变量中的内容。注意,当我们让 Python 打印 question 时,字符串周围没有引号,这告诉 Python 我们使用的是变量,而不是字符串。如果我们加上引号,Python 会将它视为字符串,如下所示:

question = "What did you have for lunch?"
print ("question")

输出:

question

让我们尝试不同的事情。没错,问用户他们吃了什么午餐很好,但如果他们不能回应,那也没多大意义!让我们修改这个程序,让用户能够输入他们吃的东西。

question = "What did you have for lunch?"
print (question)
answer = raw_input()  #在 python 3.x 中,你应该使用 "input()",因为 python 3.x 没有名为 "raw_input()" 的函数。

print ("You had " + answer + "! That sounds delicious!")

为了让用户输入内容,我们使用了一个叫做 raw_input()函数,它会等待用户输入内容并按下回车键,然后返回用户输入的内容。别忘了括号!即使它们里面没有内容,括号依然是必需的,如果你没有加上,Python 会给你报错。你还可以使用另一个函数 input(),它的功能几乎相同。我们稍后会了解这两个函数的区别。

注意:

在 Python 3.x 中,raw_input() 被重命名为 input()。也就是说,新的 input() 函数sys.stdin 读取一行并返回,不带换行符。如果输入被提前终止(例如按下 Ctrl+D),则会抛出 EOFError 错误。要获得旧版 input() 的行为,可以使用 eval(input())

在这个程序中,我们创建了一个名为 answer 的变量,并将用户输入的内容存储其中。然后,我们打印出一个新的字符串,其中包含用户输入的内容。注意字符串 "You had " 后面的空格,以及 "! That sounds delicious!" 开头的感叹号。它们帮助格式化输出,使其看起来更整齐,以避免字符串全部连在一起。

结合数字和字符串

看看这个程序,看看你能否弄明白它的作用。

print ("Please give me a number: ")
number = raw_input()

plusTen = number + 10
print ("If we add 10 to your number, we get " + plusTen)

这个程序应该从用户那里获取一个数字,加上 10,然后打印出结果。但如果你尝试运行它,它不会工作!你会遇到一个似这样的错误

Traceback (most recent call last):
  File "test.py", line 5, in <module>
    print "If we add 10 to your number, we get " + plusTen
TypeError: cannot concatenate 'str' and 'int' objects

怎么回事?Python 告诉我们发生了一个 TypeError,这意味着使用的数据类型有问题。具体来说,Python 无法处理同时使用的两种不同数据类型:整数和字符串。例如,Python 认为 number 变量保存的是一个字符串,而不是数字。如果用户输入 15,那么 number 就会包含一个字符串,它有两个字符:1 和 5。那么我们该怎么告诉 Python 15 是一个数字,而不是字符串呢?

另外,在打印结果时,我们告诉 Python 将一个字符串("If we add 10 to your number, we get ")和一个数字(plusTen)连接在一起。Python 不知道如何处理这个问题——它只能将字符串连接在一起。那么我们该如何告诉 Python 将数字当作字符串处理呢?

幸运的是,有两个完美的函数可以解决这些问题。int() 函数可以将字符串转换为整数,而 str() 函数可以将整数转换为字符串。在这两种情况下,我们只需要将要转换的内容放入括号中。因此,我们修改后的程序看起来是这样的:

print ("Please give me a number:",)
response = raw_input()

number = int(response) 
plusTen = number + 10

print ("If we add 10 to your number, we get " + str(plusTen))

注意:

另一种做法是在字符串部分后加上逗号,然后是数字变量,像这样:

print ("If we add 10 to your number, we get ", plusTen)

或者使用特殊的打印格式:

print ("If we add 10 to your number, we get %s" % plusTen)

如果有多个输入,写法可以是:

plusTwenty = number + 20
print ("If we add 10 and 20 to your number, we get %s and %s" % (plusTen, plusTwenty))

或者使用 format()

print ("If we add 10 to your number, we get {0}".format(plusTen))

学过的函数列表

  • print():打印输出信息
  • input()raw_input():询问用户并返回响应。(注意,在 3.x 版本中,raw_input() 被重命名为 input()
  • len():返回字符串的长度(字符数)
  • str():返回对象的字符串表示
  • int():将字符串或数字转换为整数

注意:

inputraw_input 函数接受一个字符串作为参数。这个字符串将在提示符显示,等待用户输入。两者的区别在于 raw_input 将输入的内容作为原始字符串处理,而 input 会把输入的数据当作 Python 代码进行评估。

Last modified: Thursday, 30 January 2025, 11:02 PM