Существуют различные способы сделать это.Вам нужно обрабатывать любые дублирующиеся буквы в парольной фразе, хотя это не проблема для парольной фразы "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)
output
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)
.