零py-(ep-19)
本帖最后由 Nicole37 于 2023-10-13 10:51 编辑字符串2:
1、字符串查找功能:
count(sub[, start[, end]])
find(sub[, start[, end]])
rfind(sub[, start[, end]])
index(sub[, start[, end]])
rindex(sub[, start[, end]])
#count用于查找指定子字符串出现的次数
x = "今天有点烦躁奥,点杯牛奶吧"
x.count("点")
2
#后面用来指定查找的下标范围
x.count("点",0,3)
0
#find\rfind用于定位sub参数指定的子字符串在字符串中的索引下标值,find是从左往右找;rfind是从右往左找
x.find("点")
3
x.rfind("点")
8
#index和rindex也用于定位sub参数指定的子字符串在字符串中的索引下标值,同理 从左往右;从右往左,与find xfind的区别就是如果找不到索引值会报错,而find会返回负一
x.index("点")
3
x.rindex("点")
8
x.index("哈")
Traceback (most recent call last):
File "<pyshell#15>", line 1, in <module>
x.index("哈")
ValueError: substring not found
x.find("哈")
-1
2、字符串替换功能:
expandtabs()
replace(old,new,count=-1)
translate(table)
#替换
#expandtabs():将代码里的tab缩进转换为空格缩进,一个tab对应的空格个数为()内的数字
z="i wan \tyou"
print(z.expandtabs(10))
i wan you
#replace(old,new,count=-1)返回一个将所有old的参数指定的子字符串替换为new参数指定的字符串,默认替换次数是-1(即替换全部)
a = "一起学习嘛"
b=a.replace("学习","逛街")
b
'一起逛街嘛'
#translate(table)返回根据table参数转换后的新字符串,table是一个表格,用str.maketrans(x[,y[,z]])来获得
#表格的前后要同等长度,一一对应
tab = str.maketrans("nicole","123456")
a = "i love china"
a.translate(tab)
'2 54v6 3h21a'
a.translate(str.maketrans("nicole","123456"))
'2 54v6 3h21a'
#maketrans还可以再加一个参数,用来将制定字符串忽略掉
a.translate(str.maketrans("nicole","123456","love"))
'23h21a'
作业
0:2
1:报错的格式不一样
2:3
3:A
4:报错 表格前后个数不一致
5:'IFishC.cm'
动手:
x = input("请输入第一个版本号,v1=")
y = input("请输入第一个版本号,v2=")
b = x.find(".")
c = y.find(".")
if int(x)>int(y):
print("v1")
if int(x)<int(y):
print("v2")
if int(x)==int(y):
if int(x)>int(y):
print("v1")
if int(x)<int(y):
print("v2")
1:x = input("请输入需要加密的明文:")
y = input("请输入需要替换的字符:")
z = input("请输入将要替换的字符:")
p=[]
if len(y)!=len(z):
print("字符数量不一致")
else:
tab = str.maketrans(y,z)
print("加密后的密文是",x.translate(tab))
for i in y:
for j in z:
p.append(i)
p.append(j)
for i in range(len(p)):
if p==p:
print("冲突")
break
for i in range(1,len(p)):
if p==p:
print("冲突")
break
作业答案:
0:count(sub[, start[, end]]) 方法是返回 sub 在字符串中不重叠的出现次数。什么叫“不重叠”呢?就是一个元素不能被重复匹配。
str1 = "xxxxx"
str1.count("xx")答案为2
1:print(x)
print(x.expandtabs(2))
print(x.expandtabs(5))
print(x.expandtabs(10))
结果:
Hello***FishC
Hello*FishC
Hello*****FishC
Hello*****FishC
不懂。。。
5: "I love FishC.com".translate(str.maketrans("love", "1234", "love"))
'IFishC.cm',str.maketrans() 方法是先执行忽略操作,再执行替换操作
动手:
0:v1 = input("请输入第一个版本号,v1 = ")
v2 = input("请输入第二个版本号,v2 = ")
n, m = len(v1), len(v2)#获取两版本号的长度
i, j = 0, 0 #初始下标值
while i < n or j < m: #用while来写循环,最终截止条件为:下标在长度范围内
x = 0
while i < n and v1 != '.':
x = x * 10 + int(v1)
i += 1
i += 1
y = 0
while j < m and v2 != '.':
y = y * 10 + int(v2)
j += 1
j += 1
if x > y:
print("v1")
break
elif x < y:
print("v2")
break
if x == y:
print("v1 = v2")
不懂。。。
1:plain = input("请输入需要加密的明文:")
x = input("请输入需要替换的字符:")
y = input("请输入将要替换的字符:")
# 加密的代码
if len(x) != len(y):
print("需要替换的字符数量必须跟将要替换的字符数量一致!")
else:
cipher = plain.translate(str.maketrans(x, y))
print("加密后的密文是:" + cipher)
# 检测冲突的代码
# flag 变量标志是否退出检测(只要找到一个冲突,就可以直接退出)
flag = 0
# 如果 x 中存在相同的字符,那么 y 对应下标的字符也应该是相同的
for each in x:
if x.count(each) > 1 and flag == 0: #连用x.count()判断x中是否有相同字符,x.find()找出重复字符的下标
i = x.find(each)
last = y
while i != -1: #使用while 循环,其条件是最终结果,在未到头之前,判断y 对应下标的字符是否相同
if last != y:
print("由于替换字符出现冲突,该密文无法解密!")
flag = -1
break
i = x.find(each, i+1)#从下标i+1开始继续搜索下一个each的下标 返回while
# 如果 y 中存在相同的字符,那么 x 对应下标的字符也应该是相同的
for each in y:
if y.count(each) > 1 and flag == 0:
i = y.find(each)
last = x
while i != -1:
if last != x:
print("由于替换字符出现冲突,该密文无法解密!")
flag = -1
break
i = y.find(each, i+1)
页:
[1]