跳转至内容

Python 编程/变量和字符串

来自维基教科书,开放世界中的开放书籍


在本节中,您将被介绍两种不同的 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

要理解这段代码,请记住,变量的名称始终位于等号(赋值运算符)的左侧,而变量的位于等号的右侧。先写名称,后写值。

我们首先声明red5blue10。如您所见,您可以向print传递多个参数,告诉它在一行上打印多个项目,并用空格分隔它们。正如预期的那样,Python 报告red存储5blue保存10

现在我们创建一个第三个变量,叫做yellow。为了设置它的值,我们告诉 Python 我们希望yellowred的值。(记住:名称在左边,值在右边。)Python 知道red5,所以它也设置yellow5

现在我们将red变量设置为blue变量的值。不要混淆——名称在左边,值在右边。Python 查找blue的值,发现它是10。因此,Python 丢弃了red的旧值(5),并用10替换了它。在这次赋值之后,Python 报告yellow5red10blue10

但是我们不是说yellow应该是red的值吗?yellow仍然是5red10的原因是,我们只说yellow应该是red赋值那一刻的值。在 Python 弄清楚red是什么并将该值分配给yellow之后,yellow就不再关心red了。yellow现在有一个值,并且该值将保持不变,无论red发生什么。

注意
Python 中不同变量之间的交互,实际上比这里解释的要复杂。上面的例子适用于整数和 Python 中内置的所有其他基本数据类型;列表字典(您将在稍后遇到这些复杂的数据类型)的行为完全不同,但。您可以阅读关于数据类型的章节,以更详细地了解 Python 中的变量是什么以及它们的类型如何影响它们的行为。但是,现在您只要记住这一点就足够了:无论何时您声明变量或更改其值,始终将变量的名称写在等号(赋值运算符)的左侧,将您要分配给它的写在右侧。

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

字符串

[编辑 | 编辑源代码]

'字符串'仅仅是一个按顺序排列的字符列表。一个字符是您可以在键盘上一次按键输入的任何东西,例如字母、数字或反斜杠。例如,“hello”是一个字符串。它有五个字符长——hello。字符串也可以包含空格:“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时,question周围没有引号:这告诉 Python 我们正在使用一个变量,而不是一个字符串。如果我们在question周围加上引号,Python 会将其视为一个字符串,如下所示

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

让我们尝试一些不同的东西。当然,询问用户午餐吃了什么很好,但如果他们不能回应,就没有多大区别!让我们编辑这个程序,以便用户可以输入他们吃的东西。

question = "What did you have for lunch?"
print (question)
answer = raw_input() #You should use "input()" in python 3.x, because python 3.x doesn't have a function named "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():给定一个字符串或数字,返回一个整数

注意

  1. inputraw_input 函数接受字符串作为参数。这个字符串将在等待用户输入时显示在提示符中。
  2. 两者之间的区别在于,raw_input 将来自输入设备的数据作为原始字符串接受,而 input 接受数据并将其评估为 Python 代码。这就是为什么使用 input 作为获取用户字符串值的方法会返回错误,因为用户需要输入带引号的字符串。

建议始终使用 raw_input,并使用 int 函数将原始字符串转换为整数。这样,我们就不必在错误处理章节之前处理错误消息,并且不会在代码中造成安全漏洞。

  1. 编写一个程序,要求用户输入一个字符串,然后告诉用户该字符串的长度。
  2. 向用户询问一个字符串,然后询问一个数字。打印出该字符串,打印该数字次数。(例如,如果字符串是 hello 并且数字是 3,那么你应该打印出 hello hello hello 。)
  3. 如果一个恶作剧的用户在询问数字时输入了一个单词,会发生什么?试试看。

解决方案

测验

华夏公益教科书