day10字符串和函数基础
1.r语言
在字符串的最前面加r或者R可以让字符串中所有的转义字符的功能消失(每个字符都会变成普通字符)
str1 = r'C:\user\name\test\demo.py'
print(str1) # C:\user\name\test\demo.py
2.字符串格式化
1.字符串拼接
name = '小张'
age = 19
message = name + '今年' + str(age) + '岁'
print(message)
2.格式化字符串
"""
语法:包含格式占位符的字符串 % (数据1,数据2,...)
格式占位符:
%s - 字符串占位符(在Python中可以给任何数据占位)
%d - 整数占位符
%f - 浮点数占位符
%.Nf - 保留N个小数占位符
"""
# 1)%s可以给任何数据类型的数据占位
str1 = '%s嘻嘻嘻嘻'%([10, 20])
print(str1)
# 2)%d可以给任何能转换成数字的数据占位
str1 = '%d - xxxx'%5
print(str1) # 5-xxxx
str1 = '%d- xxxx'5.14
print(str1) # 5.14-xxxx
# 3)%f可以给任何能转换成数字的数据占位
str1 = '%f-wwww'%3
print(str1) # 3.000000-wwww
str1 = '%f-wwww'%3.14
print(str1) # 3.140000-wwww
str1 = '余额—— %.2f'%4364
print(str1) # 余额—— 4364.00
3f-string
"""
1)基本用法
语法:f'{任何有结果的表达式}' - 用表达式的结果来填充{}所在的位置
2)加参数
语法:f'{r任何有结果的表达式:参数}'
参数:.Nf - 控制小数位数
, - 逗号分隔银行金额的格式
.N% - 显示百分比,将数据转换成百分比,比值保留N位小数
X>N:将数据转换成长度为N的字符串,不够在前面用X对应的字符来填充
X<N:将数据转换成长度为N的字符串,不够在后面用X对应的字符来填充
"""
# 1)基本用法
str1 = f'是哈哈\n123'
print(str1)
name = '小张'
age = 19
str1 = f'{name}今年{age}岁,{age*10}-{name[-1]}'
print(str1)
# 2)参数
# a. .Nf
money = 2305
str1 = f'金额:{money:.2f}元'
print(str1) # 金额:2305.00元
# b. ,
money = 2349000
str1 = f'金额:{money:,}'
print(str1) # 金额:2,349,000元
# c.%
rate = 0.5
str1 = f'市场占有率:{rate:.%}'
print(str1) # 市场占有率:50.000000%
str1 = f'市场占有率:{rate:.2%}'
print(str1) # 市场占有率:50.00%
#d. X>N X<N
# >、< - 决定填充的时候是填在前面还是后面(开口朝那填那边)
# X - 填充字符
# N - 目标长度
num = 23
str1 = f'Python2106{num:0>3}'
print(str1) # Python2106023
3.字符串相关方法
1.字符串.capitalize() - 将字符串首字母转换为大写,其余转换为小写,如果首字母不是大写字母或者不是字母,则不会转
2.center、rjust、ljust、zfill
"""
字符串.center(长度,填充字符) - 例如:'abc'.center(7,'x') -> 'xxabcxx'
字符串.rjust(长度,填充字符) - 例如:'abc'.rjust(7,'x') -> 'xxxxabc'
字符串.ljust(长度,填充字符) - 例如:'abc'.ljust(7,'x') -> 'abcxxxx'
字符串.zfill(长度)== 字符串.rjust(长度,'0') - 例如:'abc'.zfill(7) -> '0000abc'
"""
str1 = 'weixiaoqin'
print(str1.center(16,'*')) # '***weixiaoqin***'
print(str1.rjust(16, '*')) # '******weixiaoqin'
print(str1.ljust(16,'*')) # 'weixiaoqin******'
print(str1.zfill(16)) # '000000weixiaoqin'
3.find、index
"""
字符串1.find(字符串2) - 获取字符串1中字符串2第一次出现的位置,返回0开始的下标值,如果字符串2不存在返回-1
字符串1.index(字符串2) - 获取字符串1中字符串2第一次出现的位置,返回0开始的下标值;如果字符串2不存在就会报错
字符串1.find(字符串2,开始下边,结束下标)、字符串1.index(字符串2,开始下边,结束下标)index
"""
str1 = how are you? i am fine,thank you,and you?'
print(str1.fill('you')) # 8
print(str1.index('you')) # 8
print(str1.find('you', 9, len(str1))) # 29
print(str1.index('you', 9, len(str1))) # 29
5.isdigit、isnumeric
"""
字符串1.isdigit() - 判断是否是纯数字字符串(数字指0 ~ 9的数字字符)
字符串1.isnumeric() - 判断是否是纯数字字符串(数字指的是具有数字意义的字符)
"""
print('1234'.isdigit()) # True
print('1456'.isnumeric()) # True
print('23一十百千'.isdigit()) # False
print('23一十百千'.isnumeric()) # True
6.字符串.islower()、isupper
"""
字符串.islower() - 判断字符串是否是纯小写字母字符串
字符串.isupper() - 判断字符串是否是纯大写字母字符串
"""
print('weffd'.islower()) # True
print('WFDsdf'.islower()) # False
print('AHDHFJ'.isupper()) # True
print('ADSDcdd'.isupper()) # False
7.(重要) join
"""
字符串.join(序列) - 将序列中的元素用指定的字符串拼接成一个新的字符串
注意:序列中的元素必须是字符串
"""
result = ''.join('abc')
print(result) # abc
result = ','.join('abc')
print(result) # a,b,c
result = ''.join(['小明', '张三', '李四'])
print(result) # 小明张三李四
result = '+'.join(['小明', '张三', '李四'])
print(result) # 小明+张三+李四
# # 练习1:将列表中的元素合并成一个字符串
# list1 = ['abc', 100, 12.5, True, 'hello'] -> 'abc10012.5Truehello'
list1 = ['abc', 100, 12.5, True, 'hello']
list2 = [str(x) for x in list1]
print(''.join(list2))
# 练习2:已知一个列表保存多个学生的分数,提取所有学生的姓名,
# 以一个字符串的形式返回
# [{'name':'张三', 'age': 18}, {'name':'小明', 'age': 20}, {'name':'小花', 'age': 30}] -> '张三,小明,小花'
list1 = [{'name': '张三', 'age': 18}, {'name': '小明', 'age': 20}, {'name': '小花', 'age': 30}]
list2 = [x['name'] for x in list1]
print(','.join(list2))
8.strip、lstrip、rstrip
"""
字符串.strip() - 去掉字符串两端的空白
字符串.lstrip() - 去掉字符串左边的空白字符
字符串.rstrip() - 去掉字符串右边的空白字符
"""
str1 = ' \tabc 123\t'
result = str1.strip()
print('=',result,'=',sep='')
print('=',str1.rstrip(),'=',sep='')
print('=',str1.lstrip(),'=',sep='')
9.replace
"""
字符串1.replace(字符串2,字符串3) - 将字符串1中的字符串2替换成字符串3
字符串1.replace(字符串2,字符串3,N) - 将字符串1中所有的前N个字符串2替换成字符出3
"""
str1 = 'how are you? i am fine,thank you,and you?'
result = str1.replace('you', 'me')
print(result) # how are me? i am fine,thank me,and me?
result = str1.replace('you', 'me', 2)
print(result) # how are me? i am fine,thank me,and you?
10.maketrans、translate
"""
str.maketrans(字符串1,字符串2) - 创建一张字符串1和字符串2的字符对应表(字符串1和字符串2长度必须相同)
"""
str1 = 'how are you? i am fine,thank you,and you?'
table = str.maketrans('ain','你我他')
result = str1.translate(table)
print(result) # how 你re you? 我 你m f我他e,th你他k you,你他d you?
11.rfind、rindex
"""
字符串.rfind(字符串2) - 获取字符串1中字符串2从后往前第一次出现的位置,返回0开始的下标值;如果字符串2不存在返回-1
"""
str1 = 'how are you? i am fine,thank you,and you?'
print(str1.rfind('you')) # 37
print(str1.find('you')) # 8
print(str1.rindex('you')) # 8
print(str1.index('you')) # 37
12.splict
"""
字符串1.splict(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串进行切割,返回一个新的列表,切割点切完后将不存在
"""
str1 = 'how are you? i am fine,thank you,and you?'
result = str1.splict('an')
print(result) # ['how are you? i am fine,th', 'k you,', 'd you?']
result = str1.splict('you')
print(result) #['how are ','? i am fine,thank ',',and ','?']
注意·:如果切割点在最前面或者最后面或者出现连续的切割点,结果会出现空串
str4 = 'amnayouaa==a123aklpa'
print(str4.splict('a')) # ['','mn','you','','==','123','klp','']