day 09 字符串
一,回顾
元组:
不可变,有序,元素可以为任意元素
集合:
可变的,无序的
元素唯一且为不可变数据类型
集合运算:&—交际
|----并集
- 差集
^ ----对称差集
字符串:
r字符串,在字符串前面加r,字符串中所有的转义字符都无效
字符编码:
chr( )------------输入编码查询对应的字符
ord( )--------- --输入字符串查询编码
二,字符串相关函数
str(数据)-----------所有数据都能转化成字符串,在数据的打印值外加引号
eval(字符串)--------获取指定字符串引号中的内容
本处字符串去掉引号后必须是一个合法的表达式
三,字符串相关方法
join
str.join(序列)-------将序列中的元素用指定的字符串连接成一个新的字符串,学列中的元素必须都是字符串
list=["hello","world","你好","世界"]
result="".join(list)
print(result)
result=",".join(list)
print(result)
nums=[10,20,30,40,50]
result="".join([str(x) for x in nums])
将下列数字的所有个位数拼接成一个数字字符串
nums=[10,29,30,4,52]
nums = [10, 29, 30, 4, 52]
result="".join([str(x % 10) for x in nums])
print(result)
将list1中所有的数字用'+'连接,并且计算他们的和:
list1=[19,"abc",True,1.23,8,22.2,"环境"]
result="+".join([str(x) for x in list1 if type(x) in (int,float)])
print(result,eval(result),sep="+")
split
str1.split(str2)---将字符串1中所有的字符串2作为切割点对字符串1进行切割
返回包含多个字符串的列表
str1="abc123sadvs123fregs123awvwe"
result=str1.split("123")
print(result)
返回结果为:
['abc', 'sadvs', 'fregs', 'awvwe']
str1.split(str2,n)---在字串中以前n个字符作为切割点对字符串1进行切割
str1="abc123sadvs123fregs123awvwe"
print(str1.split("123",2))
返回结果为:
['abc', 'sadvs', 'fregs', 'awvwe']
注意:如果切割点在字符串开头,结尾,或者连续出现多个切割点,都会返回空字符串
rep;ace
str1.replace(str2,str3)---将str1中的所有str2都替换成str3
str1='how are you? Im fine, Thank you!'
result=str1.replace("you","me")
printz(result)
str1.replace(str2,str3,n)----将字符串1中前n个字符串2替换成字符串3
strip
str1.strip()-----去掉字符串前后的空白字符
str1=" \t \n good good study \n "
print(str1.strip())
count
str1.count(str2)------统计str1中str2出现的次数
maketrans, translate
maketrans(str2,str2)--------通过str1和str2创建替换对应关系表,len(str1)=len(str2)
str. translate(对应关系表)-------按照对应关系表将字符串中的字符进行替换
table=str.maketrans("abc","123") # a-1 b-2 c-3
str1="gvgwbsdvhwaqwfcasc"
result=str1.translate(table)
print(result)
打印结果为:
gvgw2sdvhw1qwf31s3
center ljust rjust,zfill
str.center(长度,str)--------将指定字符串变成指定长度,不够的用指定字符填充,原字符串放中间
str.ljust(长度,str)--------将指定字符串变成指定长度,不够的用指定字符填充,原字符串放左边
str.rjust(长度,str)--------将指定字符串变成指定长度,不够的用指定字符填充,原字符串放右边
str.zfill(长度)=str.rjust(长度,"0")
str1="abc"
print(str1.center(7,'x'))
find
str1.find(str2)-------获取字符串2在字符串1中第一次出现的位置
str1.index(str2)--------获取字符串2在字符串1中第一次出现的位置
两者区别在于在找不到str2时find不报错
str1.rfind(str2)-------从右开始获取字符串2在字符串1中第一次出现的位置
str1.rindex(str2)-------从右开始获取字符串2在字符串1中第一次出现的位置
isdigit isnumeric
str1.isdigit----判断是否纯数字字符串
str1.isdigit----判断是否纯数字意义字符串
str1="123"
str2="123一"
print(str1.isdigit()) # Flase
print(str2.isnumeric()) # True
常用格式占位符
%s -------- 字符串占位符,可以对应任何类型数据
%d -------- 整数占位符,可以对应任何数字
%f -------- 浮点数占位符,可以对应任何数字
四,转义字符
\t------水平制表符
\n------换行
\'------表示一个普通单引号
\"------表示一个普通双引号
\\------表示一个普通反斜杠
字符串作业:
- 输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
例如: 输入’abcd1234 ’ 输出’bd24’
str1='abcd1234 '
print(str1[::2])
- 输入用户名,判断用户名是否合法(用户名长度6~10位)
str1=input("请输入用户名:")
if 6<=len(str1)<=10:
print("合法")
else:
print("不合法")
- 输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)
例如: ‘abc’ — 合法 ‘123’ — 合法 ‘abc123a’ — 合法
suername=input("请输入用户名:")
for i in suername:
if not ("0"<=i<="9" or "a"<=i<="z" or "A"<=i<="Z"):
print("不合法")
break
else:
print("合法")
- 输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
例如: ‘abc’ — 不合法 ‘Mabc’ — 不合法 ‘123’ — 不合法 ‘abc123’ — 不合法 ‘Abc123ahs’ — 合法
name=input("请输入用户名;")
if "A"<=name[0]<="Z":
for i in range(1,len(name)+1):
if "0"<=name[i]<="9" or "a"<=name[i]<="z" or "A"<=name[i]<="Z":
print("用户名合法")
else:
print("用户名不合法")
else:
print("不合法")
- 输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
例如:输入**‘abc1shj23kls99+2kkk’** 输出:‘123992’
a=""
name='abc1shj23kls99+2kkk'
for i in name:
if "0"<=i<="9":
a+=i
print(a)
- 输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)
例如: 输入**‘a2h2klm12+’ ** 输出 ‘A2H2KLM12+’
a="a2h2klm12+"
print(a.upper())
- 输入一个小于1000的数字,产生对应的学号
例如: 输入**‘23’,输出’py1901023’** 输入**‘9’, 输出’py1901009’** 输入**‘123’,输出’py1901123’**
num="请输入1000以内的数字:"
result="'py1901"+"0"*(3-len(num))+num
print(result)
- 输入一个字符串,统计字符串中非数字字母的字符的个数
例如: 输入**‘anc2+93-sj胡说’** 输出:4 输入**‘===’** 输出:3
a=input("请输入字符串:")
count=0
for i in a:
if not ("0"<=i<="9" or "a"<=i<="z" or "A"<=i<="Z"):
count+=1
print(count)
- 输入字符串,将字符串的开头和结尾变成’+',产生一个新的字符串
例如: 输入字符串**‘abc123’, 输出’+bc12+'**
str1=input("请输入字符串:")
result="+"+str1[1:-1]+"+"
print(result)
- 输入字符串,获取字符串的中间字符
例如: 输入**‘abc1234’** 输出:‘1’ 输入**‘abc123’** 输出**‘c1’**
str1=input("请输入字符串:")
if len(str1)%2!=0:
print(str1[len(str1)//2])
elif str1==" ":
print(" ")
else:
print(str1[(len(str1)-1)//2],str1[(len(str1))//2])
- 写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)
例如: 字符串1为:how are you? Im fine, Thank you! , 字符串2为:you, 打印8
str1="how are you? Im fine, Thank you!"
str2="you"
len1=len(str1)
len2=len(str2)
for index in range(len1-len2+1):
if str1[index:index+len2]==str2:
print(index)
break
else:
print(-1)
- 获取两个字符串中公共的字符
例如: 字符串1为:abc123, 字符串2为: huak3 , 打印:公共字符有:a3
str1="abc123"
str2="huak3"
str3=[]
for i in str2:
if i in str1:
str3.append(i)
print(str(str3))
-
编写一个程序,交换指定字典的key和value。
例如:dict1={'a':1, 'b':2, 'c':3} --> dict1={1:'a', 2:'b', 3:'c'}
dict1={'a':1, 'b':2, 'c':3}
result={dict1[i]:i for i in dict1}
print(result)
- 编写一个程序,提取指定字符串中所有的字母,然后拼接在一起产生一个新的字符串
例如: 传入'12a&bc12d-+' --> 'abcd'
a=input("请输入字符串:")
b=""
for i in a:
if "a"<=i<="z" or "A"<=i<="Z":
b+=i
print(b)
- 写一个自己的capitalize函数,能够将指定字符串的首字母变成大写字母
例如: 'abc' -> 'Abc' '12asd' --> '12asd'
a=input("请输入字符串:")
b=a[0].upper()+a[1:len(a)+1]
print(b)
- 写程序实现endswith的功能,判断一个字符串是否以指定的字符串结束
例如: 字符串1:'abc231ab' 字符串2:'ab' 函数结果为: True
字符串1:'abc231ab' 字符串2:'ab1' 函数结果为: False
a=input("请输入字符串:")
b=input("请输入判断字符串:")
len2=len(b)
if a[-1:-(len(b)+1):-1]==b:
print("True")
else:
print("Flase")
- 写程序实现isdigit的功能,判断一个字符串是否是纯数字字符串
例如: '1234921' 结果: True
'23函数' 结果: False
'a2390' 结果: False
str1=input("请输入字符串:")
for i in str1:
if not "0"<=i<="9":
print("False")
break
else:
print("True")
- 写程序实现upper的功能,将一个字符串中所有的小写字母变成大写字母
例如: 'abH23好rp1' 结果: 'ABH23好RP1'
str1='abH23好rp1'
str2=""
for i in str1:
if "a"<=i<="z":
new_i=chr(ord(i)-32)
str2+=new_i
else:
str2+=i
print(str2)
- 写程序获取指定序列中元素的最大值。如果序列是字典,取字典值的最大值
例如: 序列:[-7, -12, -1, -9] 结果: -1
序列:'abcdpzasdz' 结果: 'z'
序列:{'小明':90, '张三': 76, '路飞':30, '小花': 98} 结果: 98
暂无寻到渐变方法
- 写程序实现replace函数的功能,将指定字符串中指定的旧字符串转换成指定的新字符串
例如: 原字符串: 'how are you? and you?' 旧字符串: 'you' 新字符串:'me' 结果: 'how are me? and me?'
a='how are you? and you?'
b="you"
c="me"
for i in range(len(a)-2):
if a[i:i+3]==b:
a=a[0:i]+c+a[i+3:]
print(a)
函数:
def replace(str1:str,old:str,new:str):
return new.join(str1.split(old))
方法二;
def replace(str1:str,old:str,new:str):
new_str=""
index=0
len1=len(str1)
len2=len(old)
while True:
if str1[index:index+len(2)]==old
new_str+=new
index+=len2
else:
new_str+=str1[index]
index+=1
if index>=len1:
break
return new_str
- 写程序实现split的功能,将字符串中指定子串作为切割点对字符串进行切割
例如:原字符串: 'how are you? and you?' 切割点: 'you' 结果: ['how are ', '? and ', '?']
str1='how are you? and you?'
a=input("请输入切割点:")
for i in range(len(str1)-2):
if str1[i:i+len(a)]==a:
str1=str1[0:i]+str1[i+len(a):]
print(str1)
- 用思维导图总结四大容器:列表、字典、元组、集合