Другие ответы не ошибочны, но поскольку вы используете Python, вы также можете использовать то, в чем он хорош (и ваш код, вероятно, также будет быстрее):
want_cyphered = 'Some text'
cyphered = ''.join(chr(ord(ch) + 13) for ch in want_cyphered)
print(cyphered)
decyphered = ''.join(chr(ord(ch) - 13) for ch in cyphered)
print(decyphered )
Чтобы разбить это на части (при условии, что вы новичок в Python): ''.join(list_of_parts)
берет список частей строки (символов или строк) и объединяет их в одну строку, используя любую строку в начале - в данном случае пустая строка.
Вы можете сгенерировать этот список частей, используя выражение генератора (очень эффективный способ перебора чего-то итерируемого), например [ch for ch in some_str]
, что даст вам список символов в строка.
Я только что заключил генератор в квадратные скобки, чтобы он стал фактическим списком, но когда вы пишете только генератор для использования в качестве входных данных какой-либо функции, вы можете просто передать сам генератор, без скобок типа ''.join(ch for ch in some_str)
- который в принципе ничего не делает. Он разделяет строку и снова объединяет ее.
Но вы также можете применять операции к элементам этого генератора, поэтому вместо ch
вы можете заполнить список chr(ord(ch) + 13)
, который - это шифр, который вы хотели применить.
Сложите все это вместе, и вы получите:
cyphered = ''.join(chr(ord(ch) + 13) for ch in want_cyphered)