Ради интереса я пытаюсь запустить шифр Цезаря в строке, где каждый символ смещается на предыдущий символ в строке. Начальный символ, очевидно, не смещается и используется для сдвига второго, второй символ используется в качестве семени для третьего символа и т. д.
Кодирование работает как положено; расшифровка с другой стороны...
key = "a"
word = key + "shop"
print(word)
coded = ""
for i, val in enumerate(word[1:]):
coded += (chr(((ord(word[i]) + ord(val) - 97) % 26) + 97))
print(key + coded)
encoded = key + coded
decoded = ""
for i, val in enumerate(encoded[1:]):
decoded += chr(((ord(encoded[i]) - ord(val) - 97) % 26) + 97)
print(key + decoded)
Моя математика кажется (на наивный взгляд) правильной. Есть ли у кодировки какое-то свойство, о котором я не знаю, которое не позволяет отменить это?
Пример вывода с использованием входных данных выше:
ashop
alsow
amqbp
Очевидно, я хотел бы, чтобы amqbp
было ashop
. Перемещение -97 не помогает (даже не уверен, почему, если бы это было так).
Что мне здесь не хватает?