第三节 字符串

2.3 字符串

大多数程序定义并收集某种数据,然后使用它们来做些有意义的事情。有鉴于此,对数 据进行分类大有裨益。我们将介绍的第一种数据类型是字符串。字符串虽然看似简单, 但能够以很多不同的方式使用。

字符串就是一系列字符。在Python中,用引号括起的都是字符串,其中的引号可以是单引号,也可以是双引号,如下所示:

"This is a string." 
'This is also a string.'

这种灵活性让你能够在字符串中包含引号和撇号:

'I told my friend, "Python is my favorite language!"' 
"The language 'Python' is named after Monty Python, not the snake." 
"One of Python's strengths is its diverse and supportive community."

下面来看一些使用字符串的方式。

2.3.1 使用方法修改字符串的大小写

对于字符串,可执行的最简单的操作之一是修改其中单词的大小写。请看下面的代码, 并尝试判断其作用:

name.py

name = "ada lovelace" 
print(name.title())

将这个文件保存为name.py,再运行它。你将看到如下输出:

Ada Lovelace

在这个示例中,变量name指向小写的字符串"ada lovelace"。在函数调用print()中,方法title()出现在这个变量的后面。方法是Python可对数据执行的操作。在name.title()中,name 后面的句点(. )让Python对变量name执行方法title()指定的操作。每个方法后面都跟着一对圆括号,这是因为方法通常需要额外的信息来完成其工作。这种信息是在圆括号内提供的。函数title()不需要额外的信息, 因此它后面的圆括号是空的。

方法title()以首字母大写的方式显示每个单词,即将每个单词的首字母都改为大写。这很有用,因为你经常需要将名字视为信息。例如,你可能希望程序将值Ada、ADA和ada视为同一个名字,并将它们都显示为Ada。

还有其他几个很有用的大小写处理方法。例如,要将字符串改为全部大写或全部小写, 可以像下面这样做:

name = "Ada Lovelace" 
print(name.upper()) 
print(name.lower())

这些代码的输出如下:

ADA LOVELACE 
ada lovelace

存储数据时,方法lower()很有用。很多时候,你无法依靠用户来提供正确的大小写, 因此需要将字符串先转换为小写,再存储它们。以后需要显示这些信息时,再将其转换为最合适的大小写方式。

2.3.2 在字符串中使用变量

在有些情况下,你可能想在字符串中使用变量的值。例如,你可能想使用两个变量分别表示名和姓,然后合并这两个值以显示姓名:

full_name.py

first_name = "ada" 
last_name = "lovelace" 
full_name = f"{first_name} {last_name}" 
print(full_name)

要在字符串中插入变量的值,可在前引号前加上字母f,再将要插入的变量放在花括号内。这样,当Python显示字符串时,将把每个变量都替换为其值。

这种字符串名为f字符串。f是format(设置格式)的简写,因为Python通过把花括号内的变量替换为其值来设置字符串的格式。上述代码的输出如下:

ada lovelace

使用f字符串可完成很多任务,如利用与变量关联的信息来创建完整的消息,如下所示: 

first_name = "ada" 
last_name = "lovelace" 
full_name = f"{first_name} {last_name}" 
print(f"Hello, {full_name.title()}!")

在这里,一个问候用户的句子中使用了完整的姓名,并使用方法title()来将姓名设置为合适的格式。这些代码显示一条格式良好的简单问候语:

Hello, Ada Lovelace!

还可以使用f字符串来创建消息,再把整条消息赋给变量:

first_name = "ada" 
last_name = "lovelace" 
full_name = f"{first_name} {last_name}" 
message = f"Hello, {full_name.title()}!" 
print(message)

上述代码也显示消息Hello, Ada Lovelace!,但将这条消息赋给了一个变量,这让最后的函数调用print()变得简单得多。

注意 f字符串是Python 3.6引入的。如果你使用的是Python 3.5或更早的版本, 需要使用format()方法,而非这种f语法。要使用方法format(),可在圆括号内列出要在字符串中使用的变量。对于每个变量,都通过一对花括号来引用。这样 将按顺序将这些花括号替换为圆括号内列出的变量的值,如下所示:

full_name = "{} {}".format(first_name, last_name)

2.3.3 使用制表符或换行符来添加空白

在编程中,空白泛指任何非打印字符,如空格、制表符和换行符。你可以使用空白来组织输出,让用户阅读起来更容易。

要在字符串中添加制表符,可使用字符组合\t,如下述代码的❶处所示:

>>> print('Python') 
Python 
>>> print('\tPython')❶ 
Python

要在字符串中添加换行符,可使用字符组合\n:

>>> print("Languages:\nPython\nC\nJavaScript") 
Languages: 
Python 
C 
JavaScript

还可在同一个字符串中同时包含制表符和换行符。字符串"\n\t" 让Python换到下一行,并在下一行开头添加一个制表符。下面的示例演示了如何使用一个单行字符串来生 成四行输出:

>>> print("Languages:\n\tPython\n\tC\n\tJavaScript") 
Languages: 
    Python 
    C 
    JavaScript

在接下来的两章中,你将使用为数不多的几行代码来生成很多行输出,届时制表符和换行符将提供极大的帮助。

2.3.4 删除空白

在程序中,额外的空白可能令人迷惑。对程序员来说,'python'和'python '看起来几乎没什么两样,但对程序来说,它们却是两个不同的字符串。Python能够发现'python '中额外的空白,并认为它意义重大——除非你告诉它不是这样的。

空白很重要,因为你经常需要比较两个字符串是否相同。一个重要的示例是,在用户登录网站时检查其用户名。不过在非常简单的情形下,额外的空格也可能令人迷惑。所幸,在Python中删除用户输入数据中的多余空白易如反掌。

Python能够找出字符串开头和末尾多余的空白。要确保字符串末尾没有空白,可使用方法rstrip()。

❶ >>> favorite_language = 'python ' 
❷ >>> favorite_language 
'python ' 
❸ >>> favorite_language.rstrip() 
'python' 
❹ >>> favorite_language 
'python '

与变量favorite_language 相关联的字符串末尾有多余的空白(见❶)。你在终端会话中向Python询问这个变量的值时,可看到末尾的空格(见❷)。对变量favorite_language 调用方法rstrip() 后(见❸),这个多余的空格被删除了。然而,这种删除只是暂时的,接下来再次询问favorite_language 的值时,你会发现这个字符串与输入时一样,依然包含多余的空白(见❹)。

要永久删除这个字符串中的空白,必须将删除操作的结果关联到变量:

>>> favorite_language = 'python ' 
>>> favorite_language = favorite_language.rstrip()❶ 
>>> favorite_language 
'python'

为删除这个字符串中的空白,要将其末尾的空白剔除,再将结果关联到原来的变量(见❶)。在编程中,经常需要修改变量的值,再将新值关联到原来的变量。这就是变量的值 可能随程序的运行或用户输入数据而发生变化的原因所在。

你还可以剔除字符串开头的空白,或者同时剔除字符串两边的空白。为此,可分别使用方法lstrip()和strip():

❶ >>> favorite_language = ' python ' 
❷ >>> favorite_language.rstrip() 
' python' 
❸ >>> favorite_language.lstrip() 
'python ' 
❹ >>> favorite_language.strip() 
'python'

在这个示例中,我们首先创建了一个开头和末尾都有空白的字符串(见❶)。接下来,分 别删除末尾(见❷)、开头(见❸)和两边(见❹)的空白。尝试使用这些剥除函数有助 于你熟悉字符串操作。在实际程序中,这些剥除函数最常用于在存储用户输入前对其进 行清理。

2.3.5 使用字符串时避免语法错误

语法错误是一种你时不时会遇到的错误。程序中包含非法的Python代码时,就会导致语法错误。例如,在用单引号括起的字符串中,如果包含撇号,就将导致错误。这是因为这会导致Python将第一个单引号和撇号之间的内容视为一个字符串,进而将余下的文本视为Python代码,从而引发错误。

下面演示了如何正确地使用单引号和双引号。请将该程序保存为apostrophe.py,再运行它:

apostrophe.py

message = "One of Python's strengths is its diverse community." 
print(message)

撇号位于两个双引号之间,因此Python解释器能够正确地理解这个字符串:

One of Python's strengths is its diverse community.

然而,如果使用单引号,Python将无法正确地确定字符串的结束位置:

message = 'One of Python's strengths is its diverse community.' 
print(message)

你将看到如下输出:

File "apostrophe.py", line 1 
message = 'One of Python's strengths is its diverse community.' 
SyntaxError: invalid syntax

从上述输出可知,错误发生在第二个单引号后面。这种语法错误表明,在解释器看来,其中的有些内容不是有效的Python代码。错误的原因各种各样,我将指出一些常见的原因。学习编写Python代码时,你可能会经常遇到语法错误。语法错误也是最不具体的错误类型,因此可能难以找出并修复。受困于非常棘手的错误时,请参阅附录C提供的建议。

注意编写程序时,编辑器的语法高亮功能可帮助你快速找出某些语法错误。看到Python代码以普通句子的颜色显示,或者普通句子以Python代码的颜色显示时,就可能意味着文件中存在引号不匹配的情况。

动手试一试

完成下面的每个练习时,都编写一个独立的程序,并将其保存为名称类似于name_cases.py的文件。如果遇到了困难,请休息一会儿或参阅附录C提供的建议。

练习2-3:个性化消息

用变量表示一个人的名字,并向其显示一条消息。显示的消息应非常简单,下面是一个例子。

Hello Eric, would you like to learn some Python today?

name = "Eric" 
print(f"Hello {name}, would you like to learn some Python today?")

练习2-4:调整名字的大小写

用变量表示一个人的名字,再以小写、大写和首字母大写的方式显示这个人名。

练习2-5:名言

找一句你钦佩的名人说的名言,将其姓名和名言打印出来。输出应类似于下面这样(包括引号)。

Albert Einstein once said, “A person who never made a mistake never tried anything new.”

name = "albert eistein" 
sentense = "A person who never made a mistake never tried anything new." 
print(f"{name.title()} once said,{sentense}")

练习2-6:名言2

重复练习2-5,但用变量famous_person表示名人的姓名,再创建要显示的消息并将其赋给变量message,然后打印这条消息。

famous_person = "albert eistein" 
message = "A person who never made a mistake never tried anything new." 
print(f"{famous_person.title()} once said,{message}")

练习2-7:剔除人名中的空白

用变量表示一个人的名字,并在其开头和末尾都包含一些空白字符。务必至少使用字符组合"\t"和"\n"各一次。

打印这个人名,显示其开头和末尾的空白。然后,分别使用剔除函数lstrip()、rstrip()和strip()对人名进行处理,并将结果打印出来。

name = "\tAlbert \tEistein\n" 
print(name) 
print(name.lstrip()) 
print(name.rstrip()) 
print(name.strip())

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值