这题我的解法是先将key处理,提取他们的ascil码,重复的就不提取。然后先设一个从A 到Z 的ascil的序列,然后将key中的ascil码按位替换,得到密文的ascil码序列。最后将输入的ctext根据字符对应原字母表的位置k,按k索引密文ascil码序列,最后再转回字符。
while True:
try:
key = str(input())
ctext = str(input())
num1 = []
for i in range(26):
num1.append(i+65)
num2 = []
for i in key:
flag = 0
if(ord(i) >= 65 and ord(i) <= 90):
for j in range(len(num2)):
if(ord(i) == num2[j]):
flag = 1
if(flag == 0):
num2.append(ord(i))
elif (ord(i) >= 97 and ord(i) <= 122):
for j in range(len(num2)):
if(ord(i) - 32 == num2[j]):
flag = 1
if(flag == 0):
num2.append(ord(i)-32)
for i in range(len(num2)):
for j in range(len(num1)):
flag1 = 0
if(num1[j] == num2[i]):
flag1 = 1
for k in range(i,j):
num1[j-k+i] = num1[j-k+i-1]
num1[i] = num2[i]
if(flag1 == 1):
break
num3 = []
for i in range(26):
num3.append(i+65)
res_str = ''
for i in ctext:
if(ord(i) >= 65 and ord(i) <= 90):
for j in range(len(num3)):
if(ord(i) == num3[j]):
res_str += chr(num1[j])
elif(ord(i) >= 97 and ord(i) <= 122):
for k in range(len(num3)):
if(ord(i) - 32 == num3[k]):
res_str += chr(num1[k]+32)
else:
res_str += i
print(res_str)
except:
break


京公网安备 11010502036488号