描述
密码对照表的第一行为明码行,放置大写字母表(如下表第一行所示。)
第二行为按照以下规则生成的密码行:
给定一个单词,将单词中所有字符转为大写字母,对于单词中重复出现的字母,保留第一次出现的,删除之后重复出现的该字符。
用剩余字母组成秘钥从密码行的开始位置放置;再用未在秘钥中出现的其他大写字母按字母表顺序依次填充密码行剩余位置。
例如:给定单词“HelloPython”,删除其中重复出现字母后得到秘钥“HELOPYTN”,将秘钥依次填入密码行最开始的位置,再用未在秘钥中出现的其他大写字母按字母表顺序依次填充密码行的剩余位置,最终得到密码行(如下的第二行所示)
密码对照表
ABCDEFGHIJKLMNOPQRSTUVWXYZ
HELOPYTNABCDFGIJKMQRSUVWXZ
输入一个字符串,将其中所有字母转为大写字母,依照明码密码对照表对其做加密处理,输出加密后的密文字符串。
输入格式
输入有两个:
输入一个字符串做秘钥
输入一个需要加密的符串
输出格式
输出加密后的密文字符串
示例1
输入:
HelloPython
GONE WITH THE WIND
输出:
TIGP VARN RNP VAGO
示例2
输入:
GonewiththeWind
Directed by Victor Fleming
输出:
TEDPWNRWE OY UDNRKP ICWFDJT
代码
#1
alpha="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
a2=alpha
x=input().upper()
z=input().upper()
y=list(set(x))
y.sort(key=x.index)
x=''.join(y)
for i in x:
alpha=alpha.replace(i,'')#多看看,这次就是卡在这了,replace()函数并不改变原字符串,通过重新赋值实现更改
t=x+alpha
transport=str.maketrans(a2,t)
z1=z.translate(transport)
print(z1)
#2:答案解法
import string
upperLetter = string.ascii_uppercase
s = input().upper() # 输出做密钥的字符串
code = list(set(upperLetter) - set(s)) #
code.sort() # 重排序
ls = list(set(s))
ls.sort(key = s.index) # 按输入字符串顺序重排序
keys = ''.join(ls + code)
decode = input().upper() # 输入要加密的字符串
table = ''.maketrans(upperLetter, keys) # 参数为原始字符串,替换字符串
print(decode.translate(table))