Во-первых, ваша функция не должна принимать 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!