Некорректно работает шифр Цезаря

Написал шифр Цезаря, но почему то он работает не так. Когда вводишь ключ 3, все работает, когда ключ > 3 или < 3 он не шифрует. Выдает ошибку

Traceback (most recent call last):
  File "d:\Универ\ИнфоБезопасность\Шифр Цезоря\Test.py", line 21, in <module>
    cript += ALFA[index+key]
IndexError: string index out of range
ALFA = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя,.:; "

key = int(input("Введите ключ: ")) #Ключ шифрования
lenALFA = len(ALFA) #Длина алфавита
cript = ""

#Открыти файла на чтение
file = open("D:\Универ\ИнфоБезопасность\Шифр Цезаря\Сообщение.txt", "r", encoding="utf-8")
word = file.read()
word = word.lower()
file.close()

lenWord = len(word) #Длина шифруемого текста

for i in range(lenWord):
    index = ALFA.find(word[i])
    if (index+key) > lenALFA:
        index -= lenALFA
        cript += ALFA[index+key]
    else:
        cript += ALFA[index+key]

#Запись зашифровоного сообщения
file = open("D:\Универ\ИнфоБезопасность\Шифр Цезаря\Зашифровоное сообщение.txt", "w",)
file.write(cript)
file.close()

введите сюда описание изображения


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

Автор решения: Сервер Чауш

Ну тут ошибка в мелочи, просто вы выходите за размер строки ALFA нужно всего-лишь добавить знак '=' в проверку длинны if (index+key) > lenALFA: полный исправленный код выглядит так:

ALFA = "абвгдеёжзийклмнопрстуфхцчшщъыьэюя,.:; "

key = int(input('Введите ключ: ')) #Ключ шифрования
lenALFA = len(ALFA) #Длина алфавита
cript = ""

#Открыти файла на чтение
file = open("C:\\Сообщение.txt", "r", encoding="utf-8")
word = file.read()
word = word.lower()
file.close()

lenWord = len(word) #Длина шифруемого текста

for i in range(lenWord):
    index = ALFA.find(word[i])
    if (index+key) >= lenALFA:
        index -= lenALFA
        cript += ALFA[index+key]
    else:
        cript += ALFA[index+key]

#Запись зашифрованного сообщения
file = open("C:\\Зашифрованное сообщение.txt", "w",)
file.write(cript)
file.close()

так как знак \ в строках в питоне нужен для экранирования и он же используется в путях Windows, нужно указывать их как \\ что питон в строке воспринимает как просто \

→ Ссылка