python学习入门:字符串函数的使用说明
翻译:淘特
本章涵盖的主题:
字符串
字符串连接和复制
使用IDLE编写源代码。
在IDLE中保存和运行程序。
print() 函数
input() 函数
Comments
在本章中,我们将学习如何在变量中存储文本,将文本组合在一起,并在屏幕上显示文本。我们还将制作我们的第一个程序,用"Hello World!"文本向用户致意,并让用户输入姓名。
字符串
在Python中,我们使用的文本称为字符串值(或简称字符串)。我们所有的密码和黑客程序都处理字符串值,将明文变为"一个是陆地,一个是空间"。变成像'Tqe kg im npqv,jst kg im oapxe'这样的密文。。明文和密文在我们的程序中表示为字符串值,Python代码可以操纵这些值的方式很多。
我们可以将字符串值存储在变量中,就像整数和浮点值一样。当我们键入字符串时,我们将它们放在两个单引号(')之间以显示字符串开始和结束的位置。在交互式shell中输入:
>>> spam = 'hello'
>>>
单引号不是字符串值的一部分。Python知道'hello'是一个字符串,而spam是一个变量,因为字符串被引号括起来,而变量名不是。
如果您在shell中键入spam,您应该会看到spam变量('hello'字符串)的内容。这是因为Python会将变量计算为其中存储的值:在这种情况下,字符串为'hello'。
>>> spam = 'hello'
>>> spam
'hello'
>>>
字符串几乎可以包含任何键盘字符。(我们稍后会讨论特殊的"转义字符"。)这些都是字符串的例子:
>>> 'hello'
'hello'
>>> 'Hi there!'
'Hi there!'
>>> 'KITTENS'
'KITTENS'
>>> ''
''
>>> '7 apples, 14 oranges, 3 lemons'
'7 apples, 14 oranges, 3 lemons'
>>> 'Anything not pertaining to elephants is irrelephant.'
'Anything not pertaining to elephants is irrelephant.'
>>> 'O*wY%*&OcfsdYO*&gfC%YO*&%3yc8r2'
'O*wY%*&OcfsdYO*&gfC%YO*&%3yc8r2'
注意''字符串中有零个字符; 单引号之间没有任何内容。这称为空字符串或空字符串。
使用+运算符进行字符串连接
您可以使用+运算符将两个字符串值添加到一个新字符串值中。这样做称为字符串连接。尝试在命令行中输入' Hello'+'World! ':
>>> 'Hello' + 'World!'
'HelloWorld!'
>>>
要在"Hello"和"World!"之间添加一个空格,请在"Hello"字符串的末尾和单引号前面添加一个空格,如下所示:
>>> 'Hello ' + 'World!'
'Hello World!'
>>>
请记住,Python将精确地连接你告诉它连接的字符串。如果在结果字符串中需要空格,则两个原始字符串之一中必须有空格。
+操作符可以连接两个字符串值到一个新的字符串值("你好" +"世界!"到"世界,你好!"),就像它可以增加两个整数值到一个新的整数值(2 + 2 至4) 。 由于值的数据类型,Python知道+运算符应该做什么。每个值都是有它的数据类型。值"Hello"的数据类型是一个字符串。值5的数据类型是整数。告诉我们(和计算机)数据的数据类型是什么样的数据。
+操作者可以在表达式中使用具有两个字符串或两个整数。如果您尝试使用字符串值和整数值的+运算符,则会出现错误。在交互式shell中键入以下代码:
>>> 'Hello' + 42
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
>>> 'Hello' + '42'
'Hello42'
>>>
使用*运算符进行字符串复制
您还可以在字符串和整数上使用*运算符来执行字符串复制。这将复制(即重复)一个字符串,但是整数值是多少倍。在交互式shell中键入以下内容:
>>> 'Hello' * 3
'HelloHelloHello'
>>> spam = 'Abcdef'
>>> spam = spam * 3
>>> spam
'AbcdefAbcdefAbcdef'
>>> spam = spam * 2
>>> spam
'AbcdefAbcdefAbcdefAbcdefAbcdefAbcdef'
>>>
*操作符可以用两个整数值(将它们相乘)工作。它也可以使用字符串值和整数值(它将复制字符串)。但它不能使用两个字符串值,这会导致错误:
>>> 'Hello' * 'world!'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't multiply sequence by non-int of type 'str'
>>>
字符串连接和字符串复制显示的是,Python中的运算符可以根据它们所操作的值的数据类型执行不同的操作。+ 操作符可以做加法或字符串连接。* 操作符可以做乘法或字符串复制。
使用print() 函数打印值
还有另一种称为print()函数调用的Python指令。在交互式shell中键入以下内容:
>>> print('Hello!')
Hello!
>>> print(42)
42
>>>
函数(如上例中的print())具有执行任务的代码,例如在屏幕上打印值。Python有许多不同的函数。要调用 一个函数意味着执行函数内部的代码。
在上面的例子中的指令的值传递给print()函数中,并且print()函数将打印值到屏幕上。调用函数时传递的值称为参数。(参数与数值相同,当传递给函数调用时,我们只是调用这些值。)当我们开始编写程序时,我们在屏幕上显示文本的方式是使用print() 函数。
您可以将表达式传递给print() 函数而不是单个值。这是因为实际传递给print()函数的值是该表达式的评估值。在交互式shell中尝试此字符串连接表达式:
>>> spam = 'Al'
>>> print('Hello, ' + spam)
Hello, Al
>>>
'Hello, ' + spam表达式计算结果为字符串值'Hello, Al'。此字符串值是传递给print()函数调用的值。
字符转化
有时候我们可能想要使用一个不容易输入字符串值的字符。例如,我们可能希望将单引号字符作为字符串的一部分。但是我们会收到一条错误消息,因为Python认为单引号是结束字符串值的引号,而后面的文本是错误的Python代码,而不是字符串的其余部分。在交互式shell中键入以下内容:
>>> print('Al's cat is named Zophie.')
File "<stdin>", line 1
print('Al's cat is named Zophie.')
^
SyntaxError: invalid syntax
>>>
要在字符串中使用单引号,我们需要使用转义字符。转义字符是反斜杠字符,后跟另一个字符。例如,\ t,\ n 或\'。斜杠告诉Python,斜线后面的字符具有特殊含义。在交互式shell中键入以下内容:
>>> print('Al\'s cat is named Zophie.')
Al's cat is named Zophie.
>>>
转义字符可帮助我们打印难以在源代码中键入的字母。表4-1显示了Python中的一些转义字符:
表4-1。转义字符
反斜杠始终位于转义字符的前面,即使您只想在字符串中使用反斜线。这行代码不起作用:
>>> print('He flew away in a green\teal helicopter.')
He flew away in a green eal helicopter.
这是因为"teal"中的"t"被视为反斜杠之后的转义字符。转义字符\t模拟按键盘上的Tab键。转义字符在那里,以便字符串可以包含无法输入的字符。
相反,尝试下面的代码:
>>> print('He flew away in a green\\teal helicopter.')
He flew away in a green\teal helicopter.
单引号和双引号
字符串并不总是必须在Python中的两个单引号之间。您可以改用双引号。这两行打印相同的东西:
>>> print('Hello world')
Hello world
>>> print("Hello world")
Hello world
但是你不能混用单引号和双引号。这一行会给你一个错误:
>>> print('Hello world")
SyntaxError: EOL while scanning single-quoted string
>>>
我喜欢使用单引号,因此我不必按住键盘上的Shift键来输入它们。输入起来比较容易,而且电脑也不在乎。
但是请记住,就像你必须使用转义字符 ''在单引号中包含一个字符串中的单引号一样,你需要转义字符\" 来在由双引号括起来的字符串中有一个双引号。例如,看看这两行:
>>> print('I asked to borrow Alice\'s car for a week. She said, "Sure."')
I asked to borrow Alice's car for a week. She said, "Sure."
>>> print("She said, \"I can't believe you let him borrow your car.\"")
She said, "I can't believe you let him borrow your car."
您不需要在单引号字符串中转义双引号,并且您不需要在双引号字符串中转义单引号。Python解释器很聪明,知道如果一个字符串以一种引号开头,另一种引用并不意味着字符串结束。
索引
您的加密程序通常需要从字符串中获取单个字符。索引是将方括号[和]添加到字符串值(或包含字符串的变量)的末尾,并在它们之间加上数字。这个数字被称为索引,并告诉Python在字符串中哪个位置有你想要的字符。字符串中第一个字符的索引是0。索引1用于第二个字符,索引2用于第三个字符,依此类推。
在交互式shell中键入以下内容:
>>> spam = 'Hello'
>>> spam[0]
'H'
>>> spam[1]
'e'
>>> spam[2]
'l'
请注意,表达式spam [0]的 计算结果为字符串值'H',因为H是字符串'Hello'中的第一个字符。请记住,索引从0开始,而不是1.这就是H的索引为0而不是1的原因。
图4-1。字符串'Hello'及其索引。
索引可以与包含字符串值或字符串值的变量(如"Zophie")一起使用。在交互式shell中输入以下内容:
>>>'Zophie'[2]
'P'
表达式'Zophie'[2] 计算字符串值'p'。这个'p'字符串就像任何其他字符串值一样,可以存储在变量中。在交互式shell中键入以下内容:
>>> eggs = 'Zopie'[2]
>>> eggs
'p'
>>>
如果输入的索引对于字符串来说太大,Python将显示"索引超出范围"错误消息。字符串'Hello'中只有5个字符。如果我们尝试使用索引10,那么Python将显示一个错误,指出我们的索引"超出范围":
>>> 'Hello'[10]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range
>>>
负指数
负指标从字符串的末尾开始并向前。负号索引-1是字符串中最后一个字符的索引 。索引-2是倒数第二个字符的索引,依此类推。
在交互式shell中键入以下内容:
>>> 'Hello'[-1]
'o'
>>> 'Hello'[-2]
'l'
>>> 'Hello'[-3]
'l'
>>> 'Hello'[-4]
'e'
>>> 'Hello'[-5]
'H'
>>> 'Hello'[0]
'H'
>>>
请注意,-5和0是同一字符的索引。大多数情况下,您的代码将使用正索引,但有时使用负索引会更容易。
截取字符
如果您想从字符串中获取多个字符,则可以使用slicing而不是索引。slicing也使用[和]方括号但具有两个整数索引,而不是一个。这两个指标是由一个独立的:冒号。在交互式shell中键入以下内容:
>>> 'Howdy'[0:3]
'How'
>>>
slicing评估的字符串从第一个索引开始,然后上升到第二个索引,但不包括第二个索引。字符串值'Howdy'的0索引 是H,3索引是d。由于切片达到但不包括第二个索引,因此切片'Howdy'[0:3]计算为字符串值'How'。
尝试在交互式shell中键入以下内容:
>>> 'Hello world!'[0:5]
'Hello'
>>> 'Hello world!'[6:12]
'world!'
>>> 'Hello world!'[-6:-1]
'world'
>>> 'Hello world!'[6:12][2]
'r'
>>>
请注意,表达式'Hello world!'[6:12] [2]首先评估为'world!'[2] ,这是一个进一步计算为'r'的索引。
与索引不同,如果给它一个索引太大的字符串,slicing永远不会给你一个错误。它只会返回最宽的匹配切片:
>>> 'Hello'[0:999]
'Hello'
>>> 'Hello'[2:999]
'llo'
>>> 'Hello'[1000:2000]
''
>>>
表达式'Hello'[1000:2000] 返回一个空白字符串,因为索引1000在字符串结尾之后,所以这个切片可能不包含可能的字符。
空白Slice索引
如果省略切片的第一个索引,Python会自动认为您要为第一个索引指定索引0。表达式'Howdy'[0:3]和'Howdy'[:3]评估相同的字符串:
>>> 'Howdy'[:3]
'How'
>>> 'Howdy'[0:3]
'How'
>>>
如果省略第二个索引,Python会自动认为您要指定字符串的其余部分:
>>> 'Howdy'[2:]
'wdy'
>>>
Slicing 是从较大字符串获取"子串"的简单方法。(但实际上,"子串"仍然只是一个字符串值,就像任何其他字符串一样。)尝试在shell中输入以下内容:
>>> myName = 'Zophie the Fat Cat'
>>> myName[-7:]
'Fat Cat'
>>> myName[:10]
'Zophie the'
>>> myName[7:]
'the Fat Cat'
>>>
在IDLE的文件编辑器中编写程序
到目前为止,我们一直在向交互式shell中键入一条指令。当我们编写程序时,我们输入了几条指令,并让它们在没有等待下一条指令的情况下运行。让我们写我们的第一个程序!
该软件程序提供交互shell名字叫做IDLE,除了名为文件编辑器的交互式shell外,IDLE还有另一部分内容。
在Python shell窗口的顶部,单击 文件 ► 新窗口。一个新的空白窗口会显示给我们输入我们的程序。这个窗口是文件编辑器。文件编辑器窗口的右下角将显示光标当前位于文件中的行和列。
图4-2。文件编辑器窗口。光标位于第1行第0列。
您始终可以区分文件编辑器窗口和交互式shell窗口,因为交互式shell将始终包含>>> 提示符。
Hello World!
程序员学习新语言的传统是让他们的第一个程序在屏幕上显示"Hello world!"文本。我们现在将创建我们自己的Hello World程序。
在新文件编辑器窗口中输入以下文本。我们把这个文本称为程序的源代码,因为它包含了Python将遵循的指令,以确定程序应该如何表现。
Hello World的源代码
hello.py
1. # This program says hello and asks for my name.
2. print('Hello world!')
3. print('What is your name?')
4. myName = input()
5. print('It is good to meet you, ' + myName)
IDLE程序将为不同类型的指令提供不同的颜色。键入此代码后,窗口应如下所示:
图4-3。在键入代码后,文件编辑器窗口将如下所示。
保存您的程序
一旦你输入了你的源代码,保存它,这样你就不用每次启动IDLE时重新输入它。为此,请从"文件编辑器"窗口顶部的菜单中选择" 文件 ► 另存为"。另存为窗口应该打开。在文件名字段中输入hello.py,然后点击保存。(见图4-4)
键入时应该每隔一段时间保存一次程序。这样,如果计算机崩溃或您意外退出IDLE,您将不会丢失您键入的所有内容。作为快捷方式,您可以在Windows和Linux上按Ctrl-S或在OS X上按⌘-S来保存文件。
运行你的程序
现在是时候运行我们的程序了。点击运行 ► 运行模块或仅需按F5键盘上的键。您的程序应该在首次启动IDLE时出现的shell窗口中运行。请记住,您必须从文件编辑器的窗口按F5,而不是交互式shell的窗口。
当您的程序询问您的姓名时,请继续输入,如图4-5所示:
图4-5。运行"Hello World"程序时,交互式shell的显示。
现在,当您按Enter时,程序应该按名称向您(用户,即使用该程序的用户)致意。恭喜!你已经编写了你的第一个程序。你现在是一个初学的计算机程序员。(如果您愿意,可以再次按F5再次运行此程序。)
如果你得到一个如下所示的错误:
Hello world!
What is your name?
Albert
Traceback (most recent call last):
File "C:/Python27/hello.py", line 4, in <module>
myName = input()
File "<string>", line 1, in <module>
NameError: name 'Albert' is not defined
......
这意味着你正在用Python 2而不是Python 3运行程序。Python要求输入函数在接受变量时要以''包含起来,比如 你输入'Albert'就没问题了。
打开您保存的程序
单击顶角的X关闭文件编辑器。要重新加载保存的程序,请从菜单中选择文件 ► 打开。现在就这样做,并在出现的窗口中选择 hello.py并按下打开按钮。您保存的hello.py 程序应在"文件编辑器"窗口中打开。
"Hello World"计划如何运作
我们输入的每一行都是一条指示,告诉Python准确地做什么。计算机程序很像一个配方。先做第一步,然后做第二步,等到最后。按顺序执行每条指令,从程序的最顶层开始,按照指令列表进行操作。程序执行第一行指令后,它会继续执行第二行,然后执行第三行,依此类推。
我们按程序执行程序执行,或简称执行程序。执行从第一行代码开始,然后向下移动。执行可以跳过而不是从上到下,我们将在下一章找到如何实现这一点。
让我们一行一行地查看我们的程序,看看它在做什么,从第1行开始。
注释
hello.py
1. #这个节目打招呼并问我的名字。
这一行被称为注释。注释不是针对计算机,而是针对您。电脑忽略它们。它们用于提醒您程序执行的是什么,或者告诉其他可能查看代码的人员您的代码试图执行的操作。#符号后面的任何文字(称为井号)都是注释。程序员通常在他们的代码顶部发表注释,以给程序一个标题。IDLE程序以红色文本显示评论以帮助他们脱颖而出。
函数
一个功能有点像你的程序中一个小程序。它包含从上到下执行的代码行。Python提供了一些我们可以使用的内置函数(您已经使用了print()函数)。关于函数的伟大之处在于我们只需要知道函数的作用,但不知道它是如何实现的。(您需要知道print()函数在屏幕上显示文本,但您不需要知道它是如何做到的。)
一个函数调用是一段代码,它告诉我们的程序运行函数中的代码。例如,只要你想在屏幕上显示一个字符串,你的程序就可以调用print()函数。的打印()函数将你作为输入在括号之间键入值和在屏幕上显示的文本。因为想要显示Hello World!在屏幕上,我们键入打印函数名称,后面跟着一个左括号,然后是'Hello world!'。字符串和右括号。
Print()函数
hello.py
2. print('Hello world!')
3. print('What is your name?')
这一行是对print() 函数的调用(将要打印的字符串放在括号内)。我们在函数名的末尾添加括号,以明确我们指的是名为print()的函数,而不是名为print的变量。函数结尾处的括号让我们知道我们正在讨论一个函数,就像'42'周围的引号告诉我们我们正在谈论字符串'42'而不是整数42。
第3行是另一个print() 函数调用。这次,程序显示"你叫什么名字?"
Input()函数
hello.py
4. myName = input()
第4行有一个赋值语句,其中包含一个变量(myName)和一个函数调用(input())。当调用input()时,程序将等待用户输入一些文本并按Enter键。用户输入的文本字符串(它们的名称)将成为存储在myName中的字符串值。
与表达式一样,函数调用也为返回值。(事实上,我们也可以使用单词"returns"来表示函数调用与"evaluate"相同的事情。)在这种情况下,input()函数的返回值是用户输入的字符串 - 他们的名称。如果用户在Albert中键入,则input() 函数调用将评估(即返回)字符串'Albert'。
名为input()的函数不需要任何参数(与print()函数不同),这就是为什么括号之间没有任何内容。
hello.py
5. print('It is good to meet you, ' + myName)
对于第5行的print()调用,我们使用加号运算符(+)连接字符串' It is good to meet you '和存储在myName变量中的字符串,这是我们用户输入到程序中的名称。这就是我们如何让程序以名字迎接我们。
结束程序
一旦程序执行最后一行,它就会停止。此时它已终止或退出,计算机忘记了所有变量,包括我们存储在myName中的字符串。如果您再次尝试运行程序并键入其他名称,则会打印该名称。
Hello world!
What is your name?
Alan
It is good to meet you, Alan
请记住,计算机只执行你编程的任务。在这个程序中,它被编程为询问您的姓名,让您键入一个字符串,然后打个招呼并显示您键入的字符串。
但电脑很笨。该程序不关心你是否输入你的名字,别人的名字,或只是愚蠢的东西。你可以输入你想要的任何东西,电脑会以同样的方式处理它:
Hello world!
What is your name?
poop
It is good to meet you, poop
总结
本章中你已经汇总了几个Python指令来制作一个完整的程序,询问用户的名字,然后问候它们。
后面的所有程序都会更加复杂,但不用担心。这些程序将全部逐行解释。而且,您始终可以将指令输入到交互式shell中,以便在将它们全部放入完整程序之前查看它们的操作。
请先 后发表评论~