描述
有一种技巧可以对数据进行加密,它使用一个单词作为它的密匙。下面是它的工作原理:首先,选择一个单词作为密匙,如TRAILBLAZERS。如果单词中包含有重复的字母,只保留第1个,将所得结果作为新字母表开头,并将新建立的字母表中未出现的字母按照正常字母表顺序加入新字母表。如下所示:
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
T R A I L B Z E S C D F G H J K M N O P Q U V W X Y (实际需建立小写字母的字母表,此字母表仅为方便演示)
上面其他用字母表中剩余的字母填充完整。在对信息进行加密时,信息中的每个字母被固定于顶上那行,并用下面那行的对应字母一一取代原文的字母(字母字符的大小写状态应该保留)。因此,使用这个密匙, Attack AT DAWN (黎明时攻击)就会被加密为Tpptad TP ITVH。
请实现下述接口,通过指定的密匙和明文得到密文。
数据范围:1 \le n \le 100 \1≤n≤100 ,保证输入的字符串中仅包含小写字母
输入描述:
先输入key和要加密的字符串
输出描述:
返回加密后的字符串
示例1
输入:
nihao
ni
复制
输出:
le
复制
# input,nihao
# 去重复,nihao
# 剩余字母构建26个加密字母 nihaobcdefgjklmpqrstuvwxyz
# 默认顺序的26个英文集字母 abcdefghijklmnopqrstuvwxyz
# 第一个n对应加密字符的l,第二个i对应加密字符的e
# 输出:le
def convert(instr):
# 对输入字符串进行去重复出来
ins = instr
no_rep = []
[no_rep.append(i) for i in ins if i not in no_rep]
# print(no_rep)
# ['n', 'i', 'h', 'a', 'o']
# 初始化26个英文字母
init_list = [chr(i) for i in range(97,123)]
# print(init_list)
# ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z']
# 判断26个字母不在非重复输入的字符内则字符串相加到后面依次写入
[ no_rep.append(i) for i in init_list if i not in no_rep ]
sercet = ''.join(no_rep)
# print('sercet: ',sercet)
# sercet: nihaobcdefgjklmpqrstuvwxyz
# 替换后的sercet仍然是26个字母只是按了新的规则
# 输入le两个字符串,判断对应位置,实际上是去新的密码表找到对应位置的字母即可
# 密文前的abcde和密文后的abcde,le对应的位置不变指针不变,变的只是值
news = new
res = ''
for i in news:
# print(i,ord(i)-97,type(ord(i)),sercet[ord(i)-97])
# n 13 <class 'int'> l
# i 8 <class 'int'> e
res += sercet[ord(i)-97]
return res
inStr = input()
# inStr = 'nihao'
new = input()
# new = 'ni'
secert_list = convert(instr=inStr)
print(secert_list)