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

字符串类型存储的数据是字符串,字符串是一个由字符构成的序列。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,如图所示。、

studyhard
0123456789
-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.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值