这题我的解法是先将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