内容正文:
第3章 字符串
1
学习目标/Target
掌握字符串的定义方式,能够准确定义字符串
掌握字符串的索引和切片,能够通过索引和切片获取字符串的子串
掌握字符格式化方式,能够通过%、format()和f-string格式化字符串
2
学习目标/Target
掌握字符串的处理函数,能够通过len()函数和ord函数实现特定功能
掌握字符串的处理方法,能够根据需要选择合适的方法处理字符串
熟悉字符串的运算符,能够通过+和*运算符实现字符串的拼接和复制
3
章节概述/ Summary
日常生活中经常会看见一些文本类型的数据,比如电子邮件、评论、个人资料等,这些数据的内容形式比较复杂,包括字母、数字、标点符号、特殊符号、汉字等,程序中使用字符串表示这些信息。本章将针对字符串的内容进行详细讲解。
4
目录/Contents
01
字符串的定义
字符串的索引和切片
字符串格式化
实例:制作高铁名片
02
03
04
5
目录/Contents
05
字符串运算符
字符串处理函数
字符串处理方法
06
07
实例:文本检测程序
08
6
字符串的索引与切片
3.2
7
3.2 字符串的索引和切片
Python中字符串可以包含多个字符,这些字符按一定顺序排列,每个字符所在的位置有着固定的编号,以便用户通过该编号访问它们,这些位置编号被称为索引或者下标。
按照不同的方向,索引分为正向索引和逆向索引。
正向索引的值从0开始,逆向索引的值从-1开始。
8
3.2 字符串的索引和切片
通过索引可以其对应的单个字符,使用方式为“字符串[索引]”。
words = '精诚所至金石为开'
char_one = words[1] # 获取索引为1的字符“诚”
char_two = words[-7] # 获取索引为-7的字符“诚”
9
3.2 字符串的索引和切片
通过切片从字符串中截取子串,切片的语法格式如下。
字符串[起始索引:结束索引:步长]
起始索引:表示截取字符的起始位置,取值可以是正向索引或逆向索引。
结束索引:表示截取字符的结束位置,取值可以为正向索引或逆向索引。
步长:表示每隔指定数量的字符截取一次字符串,取值可以是正负整数,默认值为1。若步长为正整数,则会按照从左到右的顺序取值;若步长为负整数,则会按照从右到左的顺序取值。
需要注意的是,切片截取的子串包含起始索引对应的字符,但不包含结束索引对应字符。
10
3.2 字符串的索引和切片
切片的示例如下:
print(words[:5]) # 获取从索引0到索引5之前的子串
print(words[5:]) # 获取从索引5到末尾的子串
print(words[4:6]) # 获取从索引4到索引6之前的子串
print(words[::2]) # 获取从索引0到末尾、步长为2的子串
print(words[-4:-2]) # 获取从索引-4到索引-2之前的子串
print(words[-4:6]) # 获取从索引-4到索引6之前的子串
精诚所至金
石为开
金石
精所金为
金石
金石
运行
结果
11
3.2 字符串的索引和切片
值得一提的是,Python中的字符串与其他编程语言不同,它是不可变的,一旦定义完成后不能被修改。如果尝试给某个索引对应的字符重新赋值时,则会出现语法错误信息。
words[3] = ','
TypeError: 'str' object does not support item assignment
运行代码,结果如下:
12
字符串格式
3.3
13
3.3.1 使用格式符%格式化字符串
在使用格式符对字符串格式化时,Python会使用一个带有格式符的字符串作为模板,这个格式符用于为真实值预留位置,并说明真实值应该呈现的格式。
"我叫%s" % "小明"
使用一个元组将多个真实值传递给字符串模板,元组中的每个值对应着一个格式符。
"我叫%s,今年%d岁了" % ("小明", 18)
14
Python还支持更多类型的格式符,每种格式符适用于不同的数据类型。
格式符 功能说明
%c 格式化单个字符及其ASCII码
%s 格式化字符串
%i或%d 格式化有符号的十进制整数
%o 格式化有符号的八进制整数
%x 格式化有符号的十六进制整数
%e 格式化科学计数法表示的浮点数,以e为底数
%E 格式化科学计数法表示的浮点数,以E为底数
%f 格式化十进制表示的浮点数
3.3.1 使用格式符%格式化字符串
15
当使用多个格式符对字符串进行格式化时,还可以通过字典传值,这时需要先以“(name)”形式对变量进行命名,每个命名对应字典的一个键,示例如下:
format_string = "我叫%(name)s,今年%(age)d岁了" % {"name": "小明", "age": 18}
print(format_string)
运行代码,结果如下所示。
我叫小明,今年18岁了
3.3.1 使用格式符%格式化字符串
16
3.3.2 使用format()方法格式化字符串
使用format()方法格式化字符串的语法格式如下:
模板字符串.format(值0, 值1, ...)
format_string = "我叫{},今年18岁了".format("小明")
print(format_string)
我叫小明,今年18岁了
示例代码:
运行结果:
17
3.3.2 使用format()方法格式化字符串
如果模板字符串中有多个符号{},并且{}内没有指定任何值的序号,则默认{}内的序号与值的顺序是互相对应的,序号从0开始递增,此时会按照从左到右的顺序依次用值替换。
18
3.3.2 使用format()方法格式化字符串
如果模板字符串的{}内明确指定了值的序号,则需要按照序号使用相应的值进行替换。
19
3.3.2 使用format()方法格式化字符串
在format()方法中,模板字符串的{}内除了参数序号以外,还可以加入其他控制信息,以便能定制更丰富的格式。{}内加入控制信息的语法格式如下:
{<值序号>:<格式控制标记>}
格式控制标记包括<填充>、<对齐>、<宽度>、<,>、<.精度>、<类型>这六个字段,这些字段都是可选的,可以组合使用。
20
3.3.2 使用format()方法格式化字符串
(1)<填充>字段是一个字符,默认使用空格填充。
(2)<对齐>字段分别使用<、>和^三个符号表示左对齐、右对齐和居中对齐。
(3)<宽度>字段用于指定值转换字符串后字符串的宽度,如果设定的宽度值比字符串的实际长度小,则使用字符串的实际长度,否则就使用设定的宽度值。
words = "design"
print("{:10}".format(words)) # 左对齐,填充空格至宽度为10
print("{:>10}".format(words)) # 右对齐,填充空格至宽度为10
print("{:@^10}".format(words)) # 居中对齐,填充@至宽度为10
print("{:@^1}".format(words)) # 宽度小于words的实际长度
design
design
@@design@@
design
运行
结果
21
3.3.2 使用format()方法格式化字符串
(4)<,>字段用于显示数字类型的千位分隔符。
words = 31415926
print("{0:,}".format(words)) # 显示千位分隔符
运行代码,结果如下所示。
31,415,926
22
3.3.2 使用format()方法格式化字符串
(5)<.精度>字段以小数点开头,适用于浮点数和字符串,如果值是浮点数,则精度表示小数部分输出的有效位数;如果值是字符串,精度表示输出字符串的最大长度。
运行代码,结果如下所示。
words = 3.1415926
print("{:.5f}".format(words)) # 输出浮点数,保留5位小数
words = "design"
print("{:.5}".format(words)) # 字符串的长度为5
3.14159
desig
23
3.3.2 使用format()方法格式化字符串
(6)<类型>字段用于控制整型和浮点型的值的格式规则。
c:输出整型对应的Unicode字符;
d:输出整型的十进制形式;
o:输出整型的八进制形式;
x:输出整型的十六进制形式;
e:输出浮点数对应的小写字母e的指数形式;
E:输出浮点数对应的大写字母E的指数形式;
f:输出浮点数的标准形式;
%:输出浮点数的百分比形式。
针对整型的输出格式
针对浮点型的输出格式
24
3.3.2 使用format()方法格式化字符串
(6)<类型>字段用于控制整型和浮点型的值的格式规则。
整型和浮点型输出格式的示例如下:
print("{:c}".format(97)) # 输出97对应的Unicode字符
print("{:x}".format(11)) # 输出十六进制形式的整数
print("{:E}".format(1568.736)) # 输出科学计数法形式的浮点数
print("{:%}".format(0.80)) # 输出浮点数的百分比形式
a
b
1.568736E+03
80.000000%
运行
结果
25
3.3.3 使用f-string格式化字符串
f-string提供了一种更为简洁的格式化字符串的方式,它在形式上以f或F引领字符串,在字符串中使用“{变量名}”标明被替换的真实值所在位置。
f"{变量名}" 或F"{变量名}"
使用f-string格式化字符串,示例如下:
name = "小明"
age = 18
format_string = f'我叫{name},今年{age}岁了'
print(format_string)
我叫小明,今年18岁了
代码运行结果:
26
$$