Python入门-基本数据类型-字符串类型及其操作

发布于:2024-06-30 ⋅ 阅读:(180) ⋅ 点赞:(0)

字符串类型存储的数据是字符串,字符串是一个由字符构成的序列。Python字符串是不可变的
不支持动态修改。本节将对字符串进行简单介绍,包括字符串的定义方式、格式化、索引、切片
拼接、重复和成员归属等。

1.字符串的定义方式

1.1单行字符串

单行字符串可以由一对单引号( ' )或双引号( " ) 作为边界来表示,单引号和双引号作用相同。
例如
"hello"
'hello'

双引号定义的字符串可以含有单引号,但是不能直接含有双引号。同理,单引号定义的字符串
也不能直接含有单引号。这是因为Python解释器会匹配先出现的一对引号,导致后面的内容无法处
理。错误做法示例如下。

'let's go'

此时代码块会出现错误高亮提示,运行时程序发生异常,异常类型为SyntaxError,表示语法错
误,异常信息如下。

  File "/root/Python_03/main.py", line 1
    'let's go'
         ^
SyntaxError: invalid syntax

要解决这个问题,可以对字符串中的单引号、双引号等特殊字符进行转义处理,即在特殊字符
前面加上转义字符"\"。此时解释器不再将特殊字符视为字符串的语法标志,而是将其与转义字符视
为一个整体。具体示例如下。

'let\'s go'

常用转义字符表

转义字符 说明 转义字符 说明
\(在行尾时) 续行符 \t 横向制表符
\\ 反斜杠符 \b 退格
\' 单引号 \r 回车
\" 双引号 \f 换页
\n 回车换行 \a 响铃

如果需要忽略字符串中的转义字符,则可以在字符串的前面添加r或者R。例如,要打印某个文
件的路径“C:\Windows\tracing”,其中“t”构成了一个转义字符,导致字符串输出格式不符合预期,
此时在字符串前加r或R即可忽略转义字符的原有作用。

在字符串前使用r或R。

print('C:\Windowstracing')      #转义字符起作用
print(r'C:\Windows\tracing')    #在字符串前加r

运行结果如下。

C:\Windows racing
C:\Windows\tracing

编程建议:字符串的定义可以选择单引号或双引号,建议在编程中统一使用其中一种。一般情况下,双引号在面对缩写和所有格时更加友好,例如,“Lets”或“Im”,无须变换引号形式或使用转义字符。如果字符串包含引号,应当优先使用另一种形式的引号来包含字符串,而非使用转义字符。

1.2多行字符串

多行字符串由一对三引号包含,可以是三单引号也可以是三双引号。三引号中包含的所有字符
都属于字符串内容,包括空格、换行等。三引号中可以包含单引号、双引号,无须转义,所有字
均以原始形态打印出来,所见即所得。

打印圣诞树。

print("""
"这是一个圣诞树"
     *
    ***
   *****
***********
     *""")

运行结果如下

"这是一个圣诞树"
     *
    ***
   *****
***********
     *

2.字符串格式化

字符串格式化是指预先制定一个带有空位的模板,然后根据需要对空位进行填充。例如,预先制定一个模板“一年的_学期我学习了_门课程”,然后在下面线的位置填充内容,可以用以下代码实现。

print("{}年的{}学期我学习了{}门课程".format(2022,"上",20))

输出结果如下。

2022年上学期我学习了20门课程

2.1 format()方法的基本用法

字符串 format() 方法的基本使用格式是:
模板字符串.format(参数列表)
模板字符串中有一系列用“{}”表示的空位,format0方法可以将以逗号间隔的参数列表按照对
应关系替换到这些空位上。如果“(}”中没有序号,则按照出现的顺序进行替换.
如果“{}”中指定了参数序号,则会按照序号对参数进行替换,参数从0开始编号.

 2.2 format()方法的格式处理

format()方法的模板字符串的空位中不仅可以填写参数序号,还可以有其他的格式处理形式,此
时空位的样式如下。

(参数序号:格式处理内容}

格式处理内容要按照以下顺序使用。
(1)填充:填充单个字符,不指定时用空格填充。
(2)对齐:“<”为左对齐,“>”为右对齐,“^”为居中对齐。
(3)符号:“+”表示在正数前加正号,负数前加负号;“-”表示正数不变,负数加负号;空格表示正数加空格,负数加负号。
(4)宽度:指定空位所占宽度。
(5)分隔符:用逗号“,”分隔数字的千位,适用于整数和浮点数。
(6)精度:用“.precision”指定浮点数的精度或字符串输出的最大长度,如“.5”
(7)类型:用于指定类型,如表所示。

类型 说明
a 对字符串类型格式化
b 将整数输出为对应的二进制数
c 将整数输出为对应的Unicodc字符
d 将整数输出为对应的十进制数
o 将整数输出为对应的八进制数
x或X 将整数输出为对应的小写或大写的十六进制数
e或E 将浮点数输出为e或E的指数形式
f 将浮点数标准输出
% 输出浮点数的百分比形式

格式化输出学生信息。

name ="张三"
studentId="202201"
#用-占位,宽度为10,姓名和学号居中
print("我叫{0:-^10},学号为(1:-^10}".format(name,studentId))

运行结果如下。

我叫----张三----,学号为--202201--

3.f字符串

Python 3.6提供了一种新的格式化字符串的方法——f-strings,即f字符串。f字符串的格式化处理与format()方法类似,但语法比其简洁。Python 3.6及以后的版本推荐使用f字符串进行字符串的格式化。f字符串用花括号“{}”表示被替换的字段。

f字符串的使用。

name ="张三"
studentId="202201"
print(f"我叫(name),学号为(studentId}")

运行结果如下。

我叫张三,学号为202201

4.字符串的索引与切片

字符串是一个不可变的字符序列,每个字符都有其编号,也称为索引。Python的索引从0开始递增,字符串的第1个字符的索引为0,第2个字符的索引为1,以此类推;索引也可以是负数,字符串的最后1个字符的索引为-1,倒数第2个字符的索引为-2,如图所示。、

s t u d y h a r d
0 1 2 3 4 5 6 7 8 9
-10 -9 -8 -7 -6 -5 -4 -3 -2 -1

根据索引可以获取字符串中的字符,例如,获取“study hard”中的字符“h”,可以通过以下代码实现。

word = "study hard"
word [6]
word [-4]

Python提供了len()函数计算字符串的长度,语法格式如下。

len(string)

其中string为要进行长度计算的字符串。

计算字符串“study hard”的长度。

length = len("study hard")
print(length)

运行结果如下。

10

len()函数在计算字符串长度时,不区分字母、汉字、数字、标点和特殊字符等,例如,字符串“学习Python使我快乐!#¥”,用len0)函数计算其长度,“学”“p”“!”“#”等各占一位,字符串长度为15。

字符串切片是指从字符串中截取部分字符组成新的字符串,且不会使原字符串产生变化,其语
法格式如下。

sname[start :end :step]

参数说明

参数 说明
sname 字符串名称
start 切片开始的位置(包括此位置),不指定时默认为0
end 切片结束的位置(不包括此位置),不指定时默认为序列的长度
step 切片的步长,不传值时默认为1,最后的冒号也可以省略

字符串的切片。

sname ="学习Python使我快乐"               #共12个字符
print("sname[:]:",sname[:])              #取到字符串所有字符
print("sname[3:8]:",sname[3:8])          #默认步长为1
print("sname[:8]:"sname[:8])             #默认从索引0开始,步长为1
print("sname[3:]: ",sname[3:])           #默认到字符串末尾,步长为1
print("sname[3:8:2]:",sname[3:8:2])      #设置步长为2
print("snamel:-4]:"sname[:-4])           #索引0到-4,不含-4
print("sname[-8:-3:2]:",sname[-8:-3:2])  #索引-8到-3,不含-3,步长为2
print("sname[8:3:-2]:"sname[8:3:-2])     #索引8到3,不含3,步长为-2

运行结果如下。

sname[:]:学习Python使我快乐
sname[3:8l:ython
sname[:8]:学习Python
sname[3:]:ython使我快乐
sname[3:8:2]:yhn
sname[:-4]:学习Python
sname[-8:-3:2]:to使
sname[8:3:-2]:使ot

5.字符串的拼接与重复

5.1.字符串拼接

使用“+”可以实现字符串拼接,将多个字符串连接起来并产生一个字符串对象。

name ="张三”
action ="吃了早饭"
print(name + action)

运行结果如下。

张三吃了早饭

这种机制只能用于字符串类型之间的拼接,否则就会发生异常。

例如.字符串类型与整型的拼接。

str1 ="我今天吃了"
num = 3
str2="碗饭"
print(strl +num + str2)

此时程序异常,异常类型为TypeError,表示类型错误,异常信息如下,

Traceback (most recent call last):
    File "c:\1000phone\test.py",line 4,in <module>
        print(strl +num + str2)
TypeError: can only concatenate str(not "int") to str

可以用str()函数和repr()函数解决此类问题。str(0函数和repr()函数是将对象转换为字符串类型的
种机制:str()函数会将对象转换为合理形式的字符串,以便用户理解;而repr()函数会创建一个字
串,用合法的Python表达式来表示对象,以供Python解释器读取。

str()函数及repr()函数的使用。

action ="Hi,1000phone"
print("str()函数处理后:"+str(action))
print("repr()函数处理后:"+repr(action))
strl="我今天吃了"
num =3
str2="碗饭"
print("用str()函数实现字符串拼接:"+str1+str(num)+ str2)

运行结果如下。

str()函数处理后:Hi,1000phone
repr()函数处理后:'Hi,1000phone'
用str()函数实现字符串拼接:我今天吃了3碗饭

针对字符串,Python语言提供了几个基本操作符

操作符 描述
x + y
连接两个字符串 x y
x * n n * x
复制 n 次字符串 x
x in s
如果 x s 的子串,返回 True ,否则返回 False

5.2.重复字符串

使用“*”可以将字符串重复多次。

print("study"* 5)

运行结果如下。

studystudystudystudystudy

6.字符串的成员归属

字符串的成员归属需要用到成员运算符,成员运算符能够判断指定序列是否包含某个值。Python
的成员运算符包括in和not in,详细说明如下。

(1)in:如果在指定序列中找到值,返回True,否则返回False。
(2)not in:如果在指定序列中没有找到值,返回True,否则返回False.

査找字符串是否含有某字符。

sentence ="i want to eat meat"
print("e在sentence中:","e" in sentence)
print("e不在sentence中:","e" not in sentence)

运行结果如下。

e在sentence中:True
e不在sentence中: False

实例解析:恺撒密码

恺撒撒密码是古罗马恺撒大帝用来对军事情报进行加密 的算法,它采用了替换方法对信息中的每一个英文字符 循环替换为字母表序列该字符后面第三个字符:
原文: A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文: D E F G H I J K L M N O P Q R S T U V W X Y Z A B C

 

原文字符 P ,其密文字符 C 满足如下条件:
                C = ( P + 3 ) mod 26
解密方法反之,满足:
                P = ( C – 3 ) mod 26

1.恺撒密码-加密

恺撒密码的加密算法程序首先接收用户输入的文本,然 后对字母a-z 和字母 A-Z 按照密码算法进行转换。
ptxt = input("请输入明文文本: ")
for p in ptxt:
    if "a" <= p <= "z":
        print(chr(ord("a")+(ord(p)-ord("a")+3)%26), end='')
elif "A" <= p <= "Z":
    print(chr(ord("A")+(ord(p)-ord("A")+3)%26), end='')
else:
    print(p, end='')

运行结果如下。

请输入明文文本: This is an excellent Python book.
Wklv lv dq hafhoohqw Sbwkrq errn.

2.恺撒密码-加密

恺撒密码的解密算法程序首先接收用户输入的加密文本, 然后对字母a-z 和字母 A-Z 按照密码算法进行反向转换.
etxt = input("请输入加密后文本: ")
for p in etxt:
    if "a" <= p <= "z":
        print(chr(ord("a")+(ord(p)-ord("a")-3)%26), end='')
elif "A" <= p <= "Z":
    print(chr(ord("A")+(ord(p)-ord("A")-3)%26), end='')
else:
    print(p, end='')

运行结果如下。

请输入加密后文本: Wklv lv dq hafhoohqw Sbwkrq errn.
This is an excellent Python book.