Питон Цезарь Брейк
Мы сгенерируем алфавиты расшифровки для каждого из 26 возможных ключей.
Я выполнил эту часть, но не могу распечатать слово из словаря. например: я только хочу, чтобы 'ebv' напечатал эй
как мне сопоставить его со словом в словаре вместо распечатки всех 26 возможных ключей.
вот словарь: http://www.ics.uci.edu/~kay/wordlist.txt
Alphabet = 'abcdefghijklmnopqrstuvwxyz'
def rotated_alphabet(key:int) -> str:
'''produces a rotated alphabet based on key and adds those letters to the end of alphabet'''
if key > 26:
key = key % 26
new_alphabet = ''
w = Alphabet[0:key]
x = Alphabet.replace(Alphabet[0:key], new_alphabet)
return (x + w)
def Caesar_break(cipher:str) ->str:
infile = open('wordlist.txt', 'r')
wordlist = []
possible = []
decode = []
words = []
for str in infile:
t = str
for i in range(0, 26):
p = rotated_alphabet(i).split()
possible+=p
for y in possible:
decrypt = str.maketrans(y, Alphabet)
decode.append(cipher.translate(decrypt))
for str in decode:
s = str
words.append(s)
print(words)
Caesar_break('eby')
распечатывает:
['ebv', 'dau', 'czt', 'bys', 'axr', 'zwq', 'yvp', 'xuo', 'wtn', 'vsm', 'url', 'tqk', 'spj', 'roi', 'qnh', 'pmg', 'olf', 'nke', 'mjd', 'lic', 'khb', 'jga', 'ifz', 'hey', 'gdx', 'fcw']
1 ответ
Канонический подход к решению этой проблемы:
- Прочитать все строки из списка слов и вставить их в словарь
dict
- Попробуйте различные вращения Цезаря через
translate
- Если вращение производит слово из словаря (
decrypt in dictionary
), выведите его
Для более длинных текстов вы можете проверить, найдены ли, например, по крайней мере половина слов в словаре. Обратите внимание на строчные / прописные проблемы, символы новой строки и т. Д.! - попробуйте использовать strip
!
Более продвинутый подход будет делать статистику персонажей и угадывать правильное вращение на основе этой статистики.