# 6.str字符串数据类型
# 字符串 (str / string)
字符串使用格式:在python中字符串使用双引号,单引号,三引号,引起来的内容就称为字符串
# 字符串操作
# 字符串相加操作
格式:变量 + 变量 或 变量 = 变量 + 变量
wo1='你好!'
wo2=' 世界'
print(wo1+wo2)
执行结果:
你好! 世界
# 字符串复制操作
格式:变量 * 次数 或 变量 = 变量 * 次数
wo = '你好! 世界\n'
print(wo * 3)
执行结果:
你好! 世界
你好! 世界
你好! 世界
以上实例,我在字符串中加了换行符,如果没加,3遍字符串就会输出在同一行
# 切片跟索引
# 索引
索引也称为下标,在python中索引也是下标是从0开始
反向索引:python中反向索引是从-1开始
索引就是字符串的下标位置
通过索引获取到的内容,其内容还是字符串类型
格式:变量[下标值]
索引实例
a = "世界这么多,你不去走走?"
print(a[1])
执行结果:
界
以上的实例,获取到了下标为1的字符
a = "世界这么多,你不去走走?"
print(a[20])
执行结果:
IndexError: string index out of range
以上的实例,通过下标值获取字符的范围超过字符串的整体范围,所以报错了
反向索引实例
a = "世界这么多,你不去走走?"
print(a[-1])
执行结果:
?
以上的实例:运用反向索引,下标值为-1,获取到了最后一位的字符
a = "世界这么多,你不去走走?"
print(a[-0])
执行结果:
世
以上的实例:使用下标值为-0,-0这下标值在python中相等于0,-0=0
# 切片
切片可以对字符串进行截取取值,从0开始,反向切片从-1开始
反向切片,默认是从左向右切
特点:起始值可取,结束值不可取
格式:变量[起始位置 : 结束位置]
实例:
a = "世界这么多,你不去走走?"
print(a[0:2])
执行结果:
世界
a = "世界这么多,你不去走走?"
so = a[0:2] + a[7:9]
print(so)
执行结果:
世界不去
a = "世界这么多,你不去走走?"
so = a[6:]
print(so)
执行结果:
你不去走走?
如果结束位置不填,默认到结尾
a = "世界这么多,你不去走走?"
so = a[:5]
print(so)
执行结果:
世界这么多
如果起始位置不填,默认从开头开始
a = "世界这么多,你不去走走?"
so = a[:]
print(so)
执行结果:
世界这么多,你不去走走?
如果起始跟结束位置都不填写,默认从头到尾执行
a = "世界这么多,你不去走走?"
so = a[-3:-1]
print(so)
执行结果:
走走
反向切片
# 步长
步长,可以在指定范围内,每几个取一个值
反向步长,以右向左方向取值
格式:变量[起始位置 : 结束位置 : 步长]
实例:
a = "世界这么多,你不去走走?"
so = a[0:5:2]
print(so)
执行结果:
世这多
每走二步,取一个值
a = "世界这么多,你不去走走?"
so = a[0::2]
print(so)
执行结果:
世这多你去走
从0位置到结尾位置,每二步为一组,每一组取第一位值
a = "世界这么多,你不去走走?"
so = a[8:1:-2]
print(so)
执行结果:
去你多这
反向步长,从8位置以反方向2位置开始,每二步为一组,每一组取第一位值
a = "世界这么多,你不去走走?"
so = a[-1:-7:-2]
print(so)
执行结果:
?走不
# 迭代
可以使用for循环来便利或获取 字符串中的每一个字符
语法:
for 变量量 in 可迭代对象:
pass
可迭代对象: 可以⼀一个⼀一个往外取值的对象
便利或获取字符串的字符,一般使用for循环,也有用while循环的
so = "there is only one line difference between genius and madman.是吗"
s = 0
while s <= len(so):
print(so[s])
s += 1
so = "there is only one line difference between genius and madman.是吗"
for i in so:
print(i)
以上的实例,就看得出 for 跟 while的区别
# 字符串的内置函数
字符串是不可变的对象,所有任何操作对原字符串是不会有任何的影响
# 英文互转函数
# 首字母变成大写-capitalize()
让字符串中第一位字母,如果是小写,就变成大写
格式:变量.capitalize() 或 变量 = 变量.capitalize()
so = "there is only one line difference between genius and madman. 是吗"
print(so.capitalize())
执行结果:
There is only one line difference between genius and madman. 是吗
# 转成大写-upper()
将字符串中的全部小写字母变成大写
格式:变量.upper() 或 变量 = 变量.upper()
so = "there is only one line difference between genius and madman.是吗"
print(so.upper())
执行结果:
THERE IS ONLY ONE LINE DIFFERENCE BETWEEN GENIUS AND MADMAN.是吗
# 转成小写-lower()
将字符串中的全部大写字母变成小写
格式:变量.lower() 或 变量 = 变量.lower()
so = "There Is Only One Line Difference Between Genius And Madman.是吗"
print(so.lower())
执行结果:
there is only one line difference between genius and madman.是吗
# 实例:验证码登录
验证码登录,要求把验证码强制转成小写字母
so = "jxPT"
wo = input("请输入验证码%s:"%(so,))
if so.lower() == wo.lower():
print("登录成功")
else:
print("验证码错误")
# 英文字母大小写互换-swapcase()
就是把字符串中的,大写字母转成小写字母,小写字母转成大写字母
格式:变量.swapcase() 或 变量 = 变量.swapcase()
so = "There Is Only One Line Difference Between Genius And Madman.是吗"
print(so.swapcase())
执行结果:
tHERE iS oNLY oNE lINE dIFFERENCE bETWEEN gENIUS aND mADMAN.是吗
# 转成小写(不常用)-casefold()
将字符串中的全部大写字母变成小写,跟上面的lower()函数功能差不多
lower() 跟 casefold() 区别
- lower() 对某些字符支持不够好
- casefold() 对所有字母都生效,如东欧的一些字母等
格式:变量.casefold() 或 变量 = 变量.casefold()
so = "There Is Only One Line Difference Between Genius And Madman.是吗"
print(so.casefold())
执行结果:
there is only one line difference between genius and madman.是吗
以上实例,执行后的结果跟上面的 lower() 函数差不多,请看下面的实例
so = "БBß" # 俄美德
print("没有加函数的结果:",so)
print("lower() 函数的结果:",so.lower())
print("casefold() 函数的结果:",so.casefold())
执行结果:
没有加函数的结果: БBß
lower() 函数的结果: бbß
casefold() 函数的结果: бbss
# 以特殊字符隔开的首字母大写(不常用)-title()
在字符串中,每个被特殊字符隔开的字母,首字母大写
注意:在title() 函数中,中文也是特殊字符
格式:变量.title() 或 变量 = 变量.title()
so = "there is only one line difference between genius and madman.是吗"
print(so.title())
执行结果:
There Is Only One Line Difference Between Genius And Madman.是吗
以上实例,空格为特殊字母,所以每个空格后第一个字母变成大写
so = "there is only one line differ是吗ence between genius and madman."
print(so.title())
执行结果:
There Is Only One Line Differ是吗Ence Between Genius And Madman.
以上实例:空格跟中文为特殊字母,所以每个空格或中文后第一个字母变成大写
# 切法函数
# 指定长度-居中-center()
字符串中,指定字符串长度,如果字符串长度没有那么长,原字符串数据居中后直接自动填充
如果不指定填充的字符,python默认是以空格填补
格式:变量.center(长度数,"填充字符") 或 变量 = 变量.center(长度数,"填充字符")
so = "博主最帅"
print(so.center(10))
执行结果:
博主最帅
以上实例,如果不指定填充字符,默认以空格填充
so = "博主最帅"
print(so.center(10,"*"))
执行结果:
***博主最帅***
以上实例,指定了 * 字符为填充字符
# 指定长度-居左-ljust()
字符串中,指定字符串长度,如果字符串长度没有那么长,原字符串数据居左后直接自动填充
如果不指定填充的字符,python默认是以空格填补
格式:变量.ljust(长度数,"填充字符") 或 变量 = 变量.ljust(长度数,"填充字符")
so = "博主最帅"
print(so.ljust(10))
执行结果:
博主最帅
以上实例,如果不指定填充字符,默认以空格填充
so = "博主最帅"
print(so.ljust(10,"*"))
执行结果:
博主最帅******
以上实例,指定了 * 字符为填充字符
# 指定长度-居右-rjust()
字符串中,指定字符串长度,如果字符串长度没有那么长,原字符串数据居右后直接自动填充
如果不指定填充的字符,python默认是以空格填补
格式:变量.rjust(长度数,"填充字符") 或 变量 = 变量.rjust(长度数,"填充字符")
so = "博主最帅"
print(so.rjust(10))
执行结果:
博主最帅
以上实例,如果不指定填充字符,默认以空格填充
so = "博主最帅"
print(so.rjust(10,"*"))
执行结果:
******博主最帅
以上实例,指定了 * 字符为填充字符
# 指定 \t 字符的长度-expandtabs()
可以指定\t的长度,默认长度是8
格式:变量.expandtabs(指定长度) 或 变量 = 变量.expandtabs(指定长度)
so = "博主最\t帅"
print(so.expandtabs(10))
执行结果:
博主最 帅
# 去除空格-左右-strip()
去除左右两端的空格,就是去除开头跟结尾的空格
strip() 函数还有去除字符的做作,默认是去除空格
想要去除指定的字符,注意:只能去除左右两端
格式:变量.strip(默认或指定字符) 或 变量 = 变量.strip(默认或指定字符)
so = " 博主 最帅 "
print(so.strip())
执行结果:
博主 最帅
默认去除空格
so = "博主 最帅 博主"
print(so.strip("博主"))
执行结果:
最帅
指定字符去除
# 去除空格-左边-lstrip()
去除左右两端的空格,就是去除开头跟结尾的空格
strip() 函数还有去除字符的做作,默认是去除空格
想要去除指定的字符,注意:只能去除左边端
格式:变量.lstrip(默认或指定字符) 或 变量 = 变量.lstrip(默认或指定字符)
so = " 博主 最帅 "
print(so.lstrip())
执行结果:
博主 最帅
默认去除空格
so = "博主 最帅 博主"
print(so.lstrip("博主"))
执行结果:
最帅 博主
指定字符去除
# 去除空格-右边-rstrip()
去除左右两端的空格,就是去除开头跟结尾的空格
strip() 函数还有去除字符的做作,默认是去除空格
想要去除指定的字符,注意:只能去除右边两端
格式:变量.rstrip(默认或指定字符) 或 变量 = 变量.rstrip(默认或指定字符)
so = " 博主 最帅 "
print(so.rstrip())
执行结果:
博主 最帅
默认去除空格
so = "博主 最帅 博主"
print(so.rstrip("博主"))
执行结果:
博主 最帅
指定字符去除
# 实例:用户登录,忽略空格
要求:模拟用户登录,忽略用户输入的空格值
user = input("请输入用户名:")
pwd = input("请输入密码:")
if user.strip() == "博主" and pwd.strip() == "123456":
print("登录成功")
else:
print("账号或密码错误")
或
user = input("请输入用户名:").strip()
pwd = input("请输入密码:").strip()
if user == "博主" and pwd == "123456":
print("登录成功")
else:
print("账号或密码错误")
# 字符串替换-replace()
字符串替换,如果不指定替换数,默认是全替换
格式:
- 变量.replace("原字符串内存","要替换的内容",替换数)
- 变量 = 变量.replace("原字符串内存","要替换的内容",替换数)
so = "There Is Only One Line Difference Between Genius And Madman."
so = so.replace("There","也许")
print(so)
执行结果:
也许 Is Only One Line Difference Between Genius And Madman.
以上实例:替换指定的字符,默认全替换
so = "There sssssss Is Only One Line Difference Between Genius And Madman."
so = so.replace("s","S",6)
print(so)
执行结果:
There SSSSSSs Is Only One Line Difference Between Genius And Madman.
以上实例:指定替换数为6,超过6位后不替换
# 字符串切割-split()
字符串切割,根据指定的切割符进行切割,用什么字符切割,切割后字符就会消失
注意:如果切割是在开头或结尾,那就会出现空字符串
切割出来后的字符串,是以列表类型显示存放,字符还是字符串类型
格式:变量.split("切割符") 或 变量 = 变量.split("切割符")
so = "There Is Only One Line Difference Between Genius And Madman."
so = so.split(" ")
print(so)
执行结果:
['There', 'Is', 'Only', 'One', 'Line', 'Difference', 'Between', 'Genius', 'And', 'Madman.']
以上实例,切割空格符,切割后空格就消失
so = "There Is Only One Line Difference Between Genius And Madman. There"
so = so.split("There")
print(so)
执行结果:
['', ' Is Only One Line Difference Between Genius And Madman. ', '']
以上实例,提醒你:如果切割是在开头或结尾,那就会出现空字符串
# 字符串指定字符插入-join()
将容器数据中的字符串使用制定的字符进行链接成一个字符串
join函数 可以把列表转成字符串
格式:'链接字符'.join(变量) 或 变量 = '链接字符'.join(变量)
wo = ['业务:你好,大家好','老板:我好,全都好','医生:他好,我也好']
so = '___'.join(wo)
print(so)
执行结果:
业务:你好,大家好___老板:我好,全都好___医生:他好,我也好
# 实例:切割函数跟字符插入函数的应用
使用split() 函数跟 join() 函数
so = "There Is Only One Line Difference Between Genius And Madman. There"
so = so.split("There")
print('_'.join(so))
执行结果:
_ Is Only One Line Difference Between Genius And Madman. _
# 格式化输出-format()
虽然python有站位符格式化输出,但是字符串类型也有个函数也是做格式化输出,功能差不多
三种格式:
变量 = {}{}{}.format("值0","值1","值2") ## 按左向右顺序输出
so = "我为{},心情好就写{},主要写{}文章".format("博主","文章","技术类") print(so) 执行结果: 我为博主,心情好就写文章,主要写技术类文章
变量 = {1}{2}{0}.format("值1","值2","值0") ## 按指定的顺序输出
so = "我为{1},心情好就写{2},主要写{0}文章".format("博主","文章","技术类") print(so) 执行结果: 我为文章,心情好就写技术类,主要写博主文章
变量 = {名称}{名称}{名称}.format(名称="值",名称="值",名称="值") ## 按指定的名称来输出
so = "我为{wo},心情好就写{so},主要写{xo}文章".format(wo="博主",xo="文章",so="技术类") print(so) 执行结果: 我为博主,心情好就写技术类,主要写文章文章
# 查找函数
# 开头查找-startswith()
判断是否以指定的字符开头
返回值:如果是:True , 如果不是:False
格式:变量.startswith("字符") 或 变量 = 变量.startswith("字符")
so = "There Is Only One Line Difference Between Genius And Madman."
print(so.startswith("There"))
执行结果:
True
# 结尾查找-endswith()
判断是否以指定的字符结尾
返回值:如果是:True , 如果不是:False
格式:变量.endswith("字符") 或 变量 = 变量.endswith("字符")
so = "There Is Only One Line Difference Between Genius And Madman."
print(so.endswith("Madman."))
执行结果:
True
# 查找字符出现次数-count()
查找指定的字符出现的次数
返回值,如果有:输出次数 , 如果没有:输出0
格式:变量.count("字符") 或 变量 = 变量.count("字符")
so = "There Is Only One Line Difference Between Genius And Madman."
print(so.count("s"))
结果:
2
以上的实例,查找 s 字符在字符串出现过几次,出现了2次
# 查找字符出现的位置-find
查找指定的字符的位置,也能指定范围找指定的字符位置
返回值:如果找得到:返回位置 , 如果找不到:返回 -1
格式:变量.find("字符",开始位置,结尾位置) 或 变量 = 变量.find("字符",开始位置,结尾位置)
so = "There Is Only One Line Difference Between Genius And Madman."
print(so.find("s"))
执行结果:
7
以上实例,查找到 s 字符在7位中
注意:只要查找到,就会马上返回,不会查找后面的 s 字符
so = "There Is Only One Line Difference Between Genius And Madman."
print(so.find("s",8))
执行结果:
47
以上实例,指定了查找的开始位置,没有指定结尾位置,默认是直接查找到结尾
# 查找字符出现的位置(报错)-index()
查找指定的字符的位置,也能指定范围找指定的字符位置
功能跟find() 函数一样,唯一不一样的就是,fin() 没结果是返回 -1 ,index() 没结果是直接报错
返回值:如果找得到:返回位置 , 如果找不到:直接程序报错
格式:变量.index("字符",开始位置,结尾位置) 或 变量 = 变量.index("字符",开始位置,结尾位置)
so = "There Is Only One Line Difference Between Genius And Madman."
print(so.index("s"))
执行结果:
7
以上实例,查找到 s 字符在7位中
注意:只要查找到,就会马上返回,不会查找后面的 s 字符
so = "There Is Only One Line Difference Between Genius And Madman."
print(so.index("s",8))
执行结果:
47
以上实例,指定了查找的开始位置,没有指定结尾位置,默认是直接查找到结尾
## index()函数
so = "There Is Only One Line Difference Between Genius And Madman."
print(so.index('世界'))
结果:
ValueError: substring not found
## find()函数
so = "There Is Only One Line Difference Between Genius And Madman."
print(so.find('世界'))
结果:
-1
以上实例,很明显的表达出 find()函数跟 index()函数的区别
# 条件判断函数
# 计算字符串长度 -len()
用于计算字符串串的⻓,长度,从 1 开始算
len() 函数运行实际是调用python内部的 len()函数
格式:len(变量) 或 变量 = len(变量)
so = "一二三"
print(len(so))
执行结果:
3
# 判断是否由大写字母组成-isupper()
检测一个字符串中的数据是否都是大写字母组成,符号不算
返回值:是:True , 否:False
格式:变量.isupper() 或 变量 = 变量.isupper()
so = "HELLO!WORLD"
print(so.isupper())
执行结果:
True
# 判断是否由小写字母组成-islower()
检测一个字符串中的数据是否都是小写字母组成,符号不算
返回值:是:True , 否:False
格式:变量.islower() 或 变量 = 变量.islower()
so = "hello!world"
print(so.islower())
执行结果:
True
# 判断是否由字母、数字、文字组成-isalnum()
检测一个字符串中的数据是否都是字母、数字、文字组成,符号不算
返回值:是:True , 否:False
格式:变量.isalnum() 或 变量 = 变量.isalnum()
so = "ThereIsOnlyOneLineDifferenceBetweenGeniusAndMadman人1"
print(so.isalnum())
执行结果:
True
# 判断是否由字母、文字组成-isalpha()
检测一个字符串中的数据是否都是字母、文字组成6,符号不算
返回值:是:True , 否:False
格式:变量.isalpha() 或 变量 = 变量.isalpha()
so = "ThereIsOnlyOneLineDifferenceBetweenGeniusAndMadman是吗"
print(so.isalpha())
执行结果:
True
# 判断是不是数字组成 - isdigit()
检测一个字符串中的数据是否由纯数字组成,十进制,符号不算
返回值:是:True , 否:False
格式:变量.isdigit() 或 变量 = 变量.isdigit()
so = "121345"
print(so.isdigit())
执行结果:
True
# 判断是不是数字组成 - isdecimal()
检测一个字符串中的数据是否由纯数字组成,数字整数,符号不算
返回值:是:True , 否:False
格式:变量.isdecimal() 或 变量 = 变量.isdecimal()
so = "121345"
print(so.isdecimal())
执行结果:
True
# 判断是不是数字组成 - isnumeric()
检测一个字符串中的数据是否由纯数字组成,可以识别中文数字,符号不算
返回值:是:True , 否:False
格式:变量.isnumeric() 或 变量 = 变量.isnumeric()
so = "一二三"
print(so.isnumeric())
执行结果:
True
# 实例:模拟10086电话
需要判断输入的值是不是数字
so = input("请输入指定的数字:")
wo = so.isdigit()
print(wo)
print('''
欢迎致电10086客服专线:
1. 话费查询
2. 业务办理
3. 宽带办理
4. 站点查询
5. 人工服务
''')
so = input("请选择服务:")
wo = so.isdigit()
if wo == True:
so = int(so)
print("请稍等")
elif wo == False:
print("请输入数字")
# 实例:for循环
要求:便利一遍字符串,如果有数字,输出出来
so = "the1re is on2ly one li3ne dif4feren5ce b6etwee7n geniu8s and mad9man.是吗"
for i in so:
if i.isdigit():
print(i)
执行结果:
1
2
3
4
5
6
7
8
9
# 过滤函数
# 制作字典-maketrans()
制作用于字符串替换的映射表(制作字典)
# 替换操作-translate()
进行字符串替换操作(替换操作)
# 实例:敏感字过滤
wo = '心态很重要,如果心态没把握好,很容易爆粗话,比如:草泥马'
so = ''.maketrans('草泥马','***')
do = wo.translate(so)
print(do)
结果:
心态很重要,如果心态没把握好,很容易爆粗话,比如:***
在以上实例,在maketrans函数中替换的值,是一对一的