day10-字符串
1、相关函数:len、str、eval
-
str(数据) - 将指定数据转换成字符串(任何类型的数据都可以转换成字符;转的时候是直接在打印值的外面加引号)
-
eval(字符串) - 计算字符串表达式的结果
2、字符串相关方法
-
join
-
字符串.join(序列) - 将序列中的元素用指定字符串拼接成一个字符串(序列中的元素必须是字符串)
list1 = ['n', 'g', 'b'] num1 = '+'.join(list1) print(num1)
-
练习:将列表中所有的元素用#连接成一个字符串
num2 = [100, 12.8, True, 'abc'] num1 = '#'.join([str(x) for x in num2]) print(num1)
-
-
split
- 字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串进行切割
- 注意1:如果切割点在开头或者结尾,切完之后会出现空串
- 注意2:如果连续出现切割点,切完之后会连续出现空串
- 字符串1.split(字符串2,N) - 将字符串1中前N个字符串2作为切割点对字符串进行切割
- 字符串1.rsplit(字符串2,N) - 将字符串1中从右往前N个字符串2作为切割点对字符串进行切割
- 字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串进行切割
-
replace - 替换
-
字符串1.replace(字符串2,字符串3) - 将字符串1中所有的字符串2都替换成字符串3
-
字符串1.replace(字符串2,字符串3,N) - 将字符串1中前N个字符串2都替换成字符串3
练习 将str1中的后面两个'you'替换成'me' str1 = 'how are you? i am fine, thank you! and you?' num1 = 'me'.join(str1.rsplit('you', 2)) print(num1)
-
-
替换字符
-
str.maketrans(字符串1,字符串2) - 创建字符串1中所有字符和字符串2中所有字符一一对应关系表
-
字符串.translate(字符对应表) - 按照字符对应表的关系将字符串进行替换
num1 = ' 1123jigugg456 ' # 将所有的'1'换成'一',将所有的'g'换成'G'-> '一一23jiGuGG456' num2 = num1.maketrans('1g', '一G') num3 = num1.translate(num2) print(num3)
-
-
删除字符串两端的空白
- 字符串.strip() - 删除字符串两端的空白
- 字符串.rstrip() - 删除字符串右端的空白
- 字符串.lstrip() - 删除字符串左端的空白
-
count - 统计个数
- 符串1.count(字符串2) - 统计字符串1中字符串2的个数
3、字符串格式化
- 字符串
- 格式字符串:包含格式占位符的字符串 % (数据1,数据2,数据3,…)
- 注意:()中的数据必须和字符中占位符一一对应
- 格式占位符
- %s - 字符串占位符,可以对应任意类型的数据
- %d - 整数占位符,可以对应任何数字
- %f - 浮点数占位符,可以对应任何数字(默认保留小数点后六位小数)
- %.Nf - 浮点数占位符,可以对应任何数字,N确定保留小数位数
4、f - string
-
f’{表达式}’- 将{}中表达式的值作为字符串拼接到字符串中
a = 190 num1 = f'a:{a}, b:{100 + 100},c:{"abc"[-1]}' print(num1)
-
f’{数据表达式:参数}’
-
f’{表达式: .Nf}’ - 保留N位小数
-
金额数值显示加逗号
-
只加逗号:f’{表达式:,}’
num1 = 100000 nums = f'金额:{num1:,}' print(nums)
-
加逗号并且保留两位小数
num1 = 100000 num2 = f'金额{num1:,.2f}' print(num2)
-
-
显示百分比
-
f’{表达式:.N%}’ - N控制小数位数
x = 0.43 # 34% num3 = f'{x:.0%}' print(num3)
-
-
控制长度
-
f’{表达式:x>y}’- 表达式是所给填充坐标字符,x表示填充内容,y控制填充长度,如果是大于符号,在表达式前填充,如果是小于符号,在表达式之后填充
num1 = 1 num2 = f'这是个数字{num1:3>5}' print(num2) # 这是个数字33331
-
作业练习
-
编写一个程序,交换指定字典的key和value。
例如:dict1={'a':1, 'b':2, 'c':3} --> dict1={1:'a', 2:'b', 3:'c'}
dict1 = {'a': 1, 'b': 2, 'c': 3} num1 = {dict1[x]: x for x in dict1} print(num1)
-
编写一个程序,提取指定字符串中所有的字母,然后拼接在一起产生一个新的字符串
例如: 传入'12a&bc12d-+' --> 'abcd'
num1 = '12a&bc12d-+' num2 = '' for x in num1: if 'a' <= x <= 'z': num2 += x print(num2)
-
写一个自己的capitalize函数,能够将指定字符串的首字母变成大写字母
例如: 'abc' -> 'Abc' '12asd' --> '12asd'
num1 = str(input('请输入一个字符串:')) num2 = '' if 'a' <= num1[0] <= 'z': num2 += chr(ord(num1[0])-32) for x in range(1, len(num1)): num2 += num1[x] else: print(num1) print(num2)
-
写程序实现endswith的功能,判断一个字符串是否已指定的字符串结束
例如: 字符串1:'abc231ab' 字符串2:'ab' 函数结果为: True 字符串1:'abc231ab' 字符串2:'ab1' 函数结果为: False
num1 = 'abc231ab' num2 = 'ab' nums = '' for x in range(len(num1)-len(num2), len(num1)): nums += num1[x] if nums == num2: print('True') break else: print('False')
-
写程序实现isdigit的功能,判断一个字符串是否是纯数字字符串
例如: '1234921' 结果: True '23函数' 结果: False 'a2390' 结果: False
num1 = str(input('请输入一个字符串:')) for x in num1: if not('0' <= x <= '9'): print('False') break else: print('True')
-
写程序实现upper的功能,将一个字符串中所有的小写字母变成大写字母
例如: 'abH23好rp1' 结果: 'ABH23好RP1'
-
写程序获取指定序列中元素的最大值。如果序列是字典,取字典值的最大值
例如: 序列:[-7, -12, -1, -9] 结果: -1 序列:'abcdpzasdz' 结果: 'z' 序列:{'小明':90, '张三': 76, '路飞':30, '小花': 98} 结果: 98
num1 = 'abH23好rp1' num2 = '' for x in num1: if 'a' <= x <= 'z': num2 += chr(ord(x)-32) else: num2 += x print(num2)
-
写程序实现replace函数的功能,将指定字符串中指定的旧字符串转换成指定的新字符串
例如: 原字符串: 'how are you? and you?' 旧字符串: 'you' 新字符串:'me' 结果: 'how are me? and me?'
str1='how are you? and you?' str2='you' str3='me' str4='' x=0 length=len(str2) while x < len(str1): if str1[x:x+length]==str2: str4+=str3 x+=length else: str4+=str1[x] x+=1 print(str4)
-
写程序实现split的功能,将字符串中指定子串作为切割点对字符串进行切割
例如:原字符串: 'how are you? and you?' 切割点: 'you' 结果: ['how are ', '? and ', '?']
str1 = 'how are you? and you?' str2 = 'you' list1 = [] str3 = '' length = len(str2) x = 0 while x < len(str1): if str1[x:x+length] == str2: list1.append(str3) str3 = '' x+= length else: str3 += str1[x] x+=1 list1.append(str3) print(list1)
-
用思维导图总结四大容器:列表、字典、元组、集合