Шифровальный круг

Mazilkree

Все просто. Переменная текст дешифруется(или шифруется) по кругу Цезаря. Все помнят эту штуку, да? Вот только не работает код ни разу, зараза такая.
text = 'c'
i = 97
while i < 124:
    text.replace (chr(i), chr(i+2))
    i += 1
print (text)
7 ответов

Mazilkree

text = 'cezar govno'
''.join(map(lambda x: chr(ord(x)+2), text))
но всё же это не то будет.


Mazilkree

def cesar_encode(txt, shift):
    k, n = ord(" "), ord("я") + 1
    f = lambda x, k=k, n=n: x - n + k if x >= n else x
 
    return "".join(chr(f(ord(x) + shift)) for x in txt)
 
 
def cesar_decode(txt, shift):
    k, n = ord(" "), ord("я") + 1
    f = lambda x, k=k, n=n: x - k + n if x < k else x
 
    return "".join(chr(f(ord(x) - shift)) for x in txt)
 
 
if "__main__" == __name__:
    data = "Все просто. Переменная текст дешифруется(или шифруется) по кругу Цезаря. Все помнят эту штуку, да? Вот только не работает код ни разу, зараза такая."
    s = cesar_encode(data, 32)
    print("'{0}'".format(s))
    s = cesar_decode(s, 32)
    print(s)
увидим следущее:'в1%@/0.12.N@п%0%,%-- ?@2%*12@$%8(403%21?H(+(@8(403%21?I@/.@*03#3@ц%' 0?N@в1%@/.,-?2@=23@823*3L@$ _@в.2@2.+<*.@-%@0 !.2 %2@*.$@-(@0 '3L@' 0 ' @2 * ?N' Все просто. Переменная текст дешифруется(или шифруется) по кругу Цезаря. Все помнят эту штуку, да? Вот только не работает код ни разу, зараза такая.


Mazilkree

>>> def enc(text, step):
...     alpha = "abcdefghijklmnopqrstuvwxyz"
...     return text.translate(
...         str.maketrans(alpha, alpha[step:] + alpha[:step]))
... 
>>> def dec(text, step):
...     alpha = "abcdefghijklmnopqrstuvwxyz"
...     return text.translate(
...         str.maketrans(alpha[step:] + alpha[:step], alpha))
... 
>>> enc('abcd', 1)
'bcde'
>>> dec('bcde', 1)
'abcd'
>>> 
>>> enc('abcd', 5)
'fghi'
>>> dec('fghi', 5)
'abcd'
>>>


Mazilkree

accept, думаю, вместо строки "abcdefghijklmnopqrstuvwxyz" лучше использовать string.ascii_lowercase.


Mazilkree

для этого нужно импортировать модуль ясный алфавит лучше


Mazilkree

accept, модуль стандартный, поэтому импортирование проблем не составляет. А при ручном вводе словаря, можно очень легко допустить ошибку.


Mazilkree

поэтому импортирование проблем не составляет
ради одной строки не стоит импортировать модуль
А при ручном вводе словаря, можно очень легко допустить ошибку.
при ручном вводе алфавита в нём можно задать любые символы, а также видно, какие символы в нём находятся и в каком порядке