Питон Цезарь Брейк

Мы сгенерируем алфавиты расшифровки для каждого из 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 ответ

Канонический подход к решению этой проблемы:

  1. Прочитать все строки из списка слов и вставить их в словарь dict
  2. Попробуйте различные вращения Цезаря через translate
  3. Если вращение производит слово из словаря (decrypt in dictionary), выведите его

Для более длинных текстов вы можете проверить, найдены ли, например, по крайней мере половина слов в словаре. Обратите внимание на строчные / прописные проблемы, символы новой строки и т. Д.! - попробуйте использовать strip!

Более продвинутый подход будет делать статистику персонажей и угадывать правильное вращение на основе этой статистики.

Другие вопросы по тегам