Некорректно работает шифр Цезаря
Написал шифр Цезаря, но почему то он работает не так. Когда вводишь ключ 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, нужно указывать их как \\ что питон в строке воспринимает как просто \
