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