关于循环中的一个小问题
画框框的那部分存在的意义是啥呀???附:原代码
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:
i = x.find(each)
last = y
while i != -1:
if last != y:
print("由于替换字符出现冲突,该密文无法解密!")
flag = -1
break
i = x.find(each, i+1)
# 如果 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)
画框框的那部分存在的意义是啥呀??? 意思是如果碰到要找到 each 变量,
就将最后一个设置为 each,
然后便减小寻找 each 变量的范围继续寻找 each,
如果当找不到了,那么上一个找到的就一定是最后一个。 x
y
伪代码:
for each in x的执行内容
第一轮
each = l
#l的数量是1,不进入if
if(l的数量 > 1 且 标记位 == 0){
}
第二轮第三轮第四轮同上,什么也不做
for each in y的执行内容
第一轮
each = 2
#2在y中的数量 > 1,进入循环
if(2在y中的数量 > 1 且 标记位 == 0)
#i记录 2在y 中第一次出现的位置,即0
i = 0
#last表示x在i位置的元素即l
last = l
#i是位置,位置为-1表示非法
while i != -1
第一次循环 l == x,不进入if
#i记录2在y中下一次出现的位置即i=1,没有再次出现,则i=-1
i = x.find(each, i + 1)
第二轮循环 l != x,进入if
print("由于替换字符出现冲突,该密文无法解密!")
标记为 -1
break
======================================================
解释:
为了方便说明,我们把一对(x,y)称作一个加密对
大概意思就是
x
y
时,在执行 for each in y 时,
先形成(‘l’,2)的加密组合,并用last记录 x 即加密对左边的'1'
然后找了一下y中 第二次出现2的位置,对应取出x中该位置的o进行比较,发现o并不等于last记录的x值,这样就说明,这个位置的加密对('o',2)就和之前我们生成的('l',2)冲突了 翼是孤独 发表于 2022-1-28 14:12
x
y
伪代码:
i = x.find(each, i + 1)
find后面的括号为啥有俩参数啊 muyang_zzF6 发表于 2022-1-28 17:07
i = x.find(each, i + 1)
find后面的括号为啥有俩参数啊
描述
Python find() 方法检测字符串中是否包含子字符串 str ,如果指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,如果包含子字符串返回开始的索引值,否则返回-1。
语法
find()方法语法:
str.find(str, beg=0, end=len(string))
参数
str -- 指定检索的字符串
beg -- 开始索引,默认为0。
end -- 结束索引,默认为字符串的长度(不填就代表默认)。
返回值
如果包含子字符串返回开始的索引值,否则返回-1。
页:
[1]