有多种方法可以做到这一点。您需要处理密码短语中的所有重复字母,尽管这对于密码短语“PYTHON”来说不是问题。您还应该忽略密码短语中的任何空格。
在这段代码中,我使用了一个集合,以便忽略密码短语中的重复字母,并且如果密码短语中存在其他字母,则不会将它们添加到密钥中。
from string import ascii_uppercase
pass_phrase = 'PYTHON'
used = {' ', '\n'}
key = []
for c in pass_phrase.upper() + ascii_uppercase:
if c not in used:
key.append(c)
used.add(c)
key = ''.join(key)
print(key)
输出
PYTHONABCDEFGIJKLMQRSUVWXZ
此代码将密码短语转换为大写,但您可能不喜欢它处理密码短语中的非字母字符(除了空格和换行符)的方式。 ;)
这是您可以使用密钥进行编码和解码的一种方式。
encode = {u: v for u, v in zip(ascii_uppercase, key)}
decode = {v: u for u, v in zip(ascii_uppercase, key)}
src = 'The quick brown fox jumps over the lazy dog.'
out = ''.join([encode.get(c, c) for c in src.upper()])
print(out)
decoded = ''.join([decode.get(c, c) for c in out.upper()])
print(decoded)
输出
QAO KRBTD YLIUG NIV CRFJM ISOL QAO EPXW HI1.
THE QUICK BROWN FOX JUMPS OVER THE LAZY DOG.
编码和解码例程通过使用.get(c, c)不变地传递非字母字符。