1.操作字符串
1)查(获取字符串中的字符)
- 获取单个字符:字符串[下标]
- 字符串切片:字符串[开始下标:结束下标:步长]
- 遍历字符串:直接遍历字符串/通过遍历下标遍历字符串
a.获取单个字符
print('==========获取单个字符==========')
str1 = 'hello,python!'
print(str1[4], str1[-4])
str2 = 'abc\n123\u4e00你好'
print(str2[7]) # 一
# 补充:r语法 - 在字符串的最前面加r/R,会让字符串中所有的转义字符的功能消失 (一般在正则表达式中使用)
str3 = r'\tabc\n123\u4e00你好'
print(str3)
print(str3[7]) # 1
b.字符串切片
str1 = 'hello,python!'
print(str1[1:7:2]) # el,
print(str1[-1:7]) #
print(str1[-2:2:-1]) # nohtyp,ol
print(str1[:5:2]) # hlo
print(str1[2::-1]) # leh
print(str1[-5::2]) # to!
2)字符串相关操作
a.数学运算符:+,*
字符串1 + 字符串2 - 将字符串1和字符串2拼接在一起产生一个新的字符串
str1 = 'hello'
str2 = 'abc'
print(str1 + ',' + str2)
字符串 * N 或者 N * 字符串 - 字符串重复N次产生一个新的字符串
print(str1 * 3)
b.比较运算符:<,>,<=,>=,==,!=
1.字符串比较大小:从前往后比较两个字符串中相同位置上的字符的大小,谁的字符的编码值大对应的字符串就大
2.应用
判断字符是否是大写字母:'A' <= char <= 'Z'
判断字符是否是小写字母:'a' <= char <= 'z'
判断字符是否是字母:('A' <= char <= 'Z') or ('a' <= char <= 'z')
判断字符是否是中文字符:'\u4e00' <= char <= '\u9fa5'
判断字符是否是数字字符:'0' <= char <= '9'
print('acsasa' > 'cd') # False
print('abcs' > 'abca') # True
# 练习1:统计输入的字符串中数字字符的个数
# 练习2:将输入的字符串中所有的小写字母取出来
num = 0
str4 = input('请输入用户名:')
str5 = ''
for chars in str4:
if '0' <= chars <= '9':
num += 1
if 'a' <= chars <= 'z':
str5 += chars
print('数字字符的个数:', num)
print(str5)
c.in 和 not in
字符串1 in 字符串2 - 判断字符串2中是否包含字符串1(判断字符串1是否是字符串2的子串)
str1 = 'abc'
str2 = 'abcaqk1'
print(str1 in str2) # True
print(str1 in 'a1sba1c') # False
d.相关函数:len, max, min, sorted, str
str(数据) - 将指定数据转换成字符串;(所有类型的数据都可以转换成字符串,转换的时候是直接在数据本身外加引号)
字符串转整型:字符串去掉引号后本身就是一个整数,才能转换成整型
字符串转浮点型:字符串去掉引号后本身就是一个数字,才能转换成浮点型
print(float('3e4'))
print(int('39'))
2.格式字符串
1)什么是格式字符串
字符串中使用格式占位符来代替字符串中变化的部分,这种字符串就是格式字符串
1.语法
带有格式占位符的字符串 % (值1,值2,值3,...)
2.说明
% - 固定写法
() - 固定写法,当格式占位符只有一个的时候可以省略
值 - 值要和前面的格式占位符一一对应(个数和类型)
3.格式占位符(不是python特有的)
%s - 字符串
%d - 整型
%.Nf - 浮点型,N表示小数点后面的位数
%c - 字符(可以将字符编码转换成字符拼接到字符串中)
name = '小明'
age = 3
gender = '男'
weight = 55
pay = 100000
message = '%s今年%d岁,性别%s,体重:%.2fkg,薪资:%.2f元' % (name, age, gender, weight, pay)
print(message)
2)格式字符串
带有{}的格式字符串.format(值1,值2,值3,...)
message = '{},今年{}岁'.format('小明', 10)
print(message)
message = '{0},{1},{1}{0}'.format('小明', 10)
print(message) # 小明,10,10小明
message = '{name},{age}'.format(name='小白', age=18)
print(message)
message = '{1[1]},{0},{0[0]}'.format([0, 1], 'abc')
print(message)
数字格式
# 注意:格式字符串中约束小数位数的时候采用的是四舍五入
# {:.Nf} - 让数字保留N位小数
message = '圆周率:{0:.2f},周长:{0:.1f}*{1}**2'.format(3.1415926, 10) # 四舍五入
print(message)
3.字符串相关方法
1)小写字母和大小字母之间的相互转换
char = 'a'
# 小写字母转大写:编码值减去32
new_char = chr(ord(char) - 32)
print(new_char)
2)字符串对齐
字符串.center(长度,字符) - 产生一个指定长度的字符串,原字符串居中,剩下的部分用指定的字符填充
字符串.ljust(长度,字符) - 产生一个指定长度的字符串,原字符串居左,剩下的部分用指定的字符填充
字符串.rjust(长度,字符) - 产生一个指定长度的字符串,原字符串居右,剩下的部分用指定的字符填充
字符串.zfill(长度) - 产生一个指定长度的字符串,原字符串居右,剩下的部分用字符0填充
str1 = 'abc'
new_str1 = str1.center(9, ' ')
print(new_str1)
new_str2 = str1.ljust(5, ' ')
print(new_str2)
new_str3 = str1.rjust(8, ' ')
print(new_str3)
练习:产生学号
num = 4
new_str4 = 'py1905' + str(num).zfill(5)
print(new_str4)
3)查找
字符串1.find(字符串2) - 获取字符串2第一次在字符串1出现的位置,如果有返回下标(返回正的下标),没有返回-1
字符串1.index(字符串2) - 获取字符串2第一次在字符串1出现的位置,如果有返回下标(返回正的下标),没有就报错
字符串1.find(字符串2,开始下标,结束下标) - 在开始下标到结束下标前对应的返回内查找字符串2
字符串1.index(字符串2,开始下标,结束下标) -
str1 = 'how are you'
print(str1.find('are'))
print(str1.find('1')) # -1
# print(str1.index('1')) # ValueError: substring not found
4)join(***)
字符串1.join(序列) - 将序列中的元素用字符串1连接在一起产生一个新的字符串(序列中的元素必须都是字符串)
names = ['小黑', '小华', '小花']
new_str5 = ''.join(names)
print(new_str5)
5)替换
字符串1.replace(old, new) - 将字符串1中所有的old都替换成new,然后产生一个新的字符串
str2 = 'how are you? I am fine, thank you!'
new_str2 = str2.replace('are', 'is')
print(str2)
print(new_str2)
创建映射表(map)
str.maketrans(字符串1,字符串2) - 创建字符串1和字符串2字符一一对应的映射表,字符串1是需要被替换的字符,字符串2是目的字符(新字符)
字符串1.translate(映射表) - 按照映射表将字符串中的字符进行替换,产生一个新的字符串
str2 = 'how are you? I am fine, thank you!'
map1 = str2.maketrans('are', '123')
print(map1)
str2 = 'how are you? I am fine, thank you!'
new_str2 = str2.translate(map1)
print(new_str2)
6)字符串切割
字符串.split(字符串2) - 将字符串1中的字符串2作为切点,切割字符串1
lists = 'how are you? I am fine, thank you!'.split(' ')
print(lists)