Шифр Цезаря на Python

не могу понять, что не так с кодом. Вроде бы всё работает, но задание на сайте его не принимает. Задание звучит так "Юлий Цезарь использовал шифрование текста. Каждая буква менялась на следующую по алфавиту через k позиций по кругу. Необходимо по заданному шифру установить исходный текст

Вводные данные: В первой строке задано шифровку, которая состоит из не более 255 больших латинских букв. Во второй строке число k (1 ≤ k ≤ 10).

Исходные данные: результат шифра

Например: вводите XPSE 1 Получаете: WORD

Ссылка на задание

Вот мой код :

import string

s = input()
n = int(input())
alpha = string.ascii_uppercase
for l in s:
    k = alpha.index(l)
    k -= n
    s = s.replace(l, alpha[k])
print(s)

Ответы (2 шт):

Автор решения: ganz

ошибка в том, что alpha.index(l) возвращает номер буквы в строке, что тебе не нужно, тебе нужно исспользовать функции ord и chr, для кирилицы предварительно импортировать модуль unicodedata. Решение не прилагаю, так как отберу интерес. Так же следует учесть, что наборы символов содержат знаки препинания, что не вписывается в класическое решение. Так же следует учесть цикличность, к примеру к последней букве нужно добавить число (нужно будет считать с начала).

→ Ссылка
Автор решения: CrazyElf

Нельзя использовать replace с исходной строкой, потому что вы меняете какую-то букву на другую, и если потом такая же буква как эта новая встретится в исходном слове, то вы эту поменянную уже букву сдвинете ещё раз. Лучше для таких операций использовать, например, списковое сокращение (либо простое добавление в список в цикле), чтобы обрабатывать буквы слова независимо друг от друга. Например, запустите ваш код и введите ZYX, результат будет WWW именно из-за вышеописанного.

P.S. По двум другим пунктам я был не прав, не обратил внимание, что речь о расшифровке шифра. Убрал их.

→ Ссылка