Как я могу перевести код шифра Цезаря обратно в нормальный в Python? - PullRequest
0 голосов
/ 08 июня 2018

Мне интересно, как я могу перевести код шифра Цезаря в обычный текст.Я уже сделал перевод обычного текста в код шифра, и вот как я это сделал:

def conversion(chr,ord):
    for letter in stringinput:
            cipheresult = chr(ord(letter) + int(shiftnumber))
            print(cipheresult)

Поэтому мне интересно, как я мог бы сделать полную противоположность этому и перевести его обратно к тому, что было быбыла строка ввода.Кстати, переменная shiftnumber определяется тем, что пользователь вводит в программу.

Спасибо

1 Ответ

0 голосов
/ 08 июня 2018

Во-первых, ваша функция не должна принимать chr и ord в качестве аргументов.Вместо этого введите вашу строку и сумму, на которую вы хотите сдвинуть.Распространенным способом реализации шифра является использование str.translate.

from string import ascii_lowercase, ascii_uppercase, ascii_letters

def cipher(text, shift):
    translation = str.maketrans(
        ascii_letters,
        ascii_lowercase[shift:] + ascii_lowercase[:shift] +\
        ascii_uppercase[shift:] + ascii_uppercase[:shift]
    )

    return text.translate(translation)

secret_msg = cipher('Python is cool!', 1) # 'Qzuipo jt dppm!'

Наконец, поскольку шифрование смещает символы на k, обратная операция заключается в простом шифровании на -k.

msg = cipher('Qzuipo jt dppm!', -1) # Python is cool!
...