Неправильная расшифровка сообщения
Пишу шифровальщик алгоритм такой: каждая буква земенятся на определеноое количество в правою,эти цифры заносятся в ключ. Функция дешифровки работает некоректно вместо нормального вывода сообщения она выдает ZZZZZZZZ(Вывод программы ниже). Если послание состоит из одной буквы(а) и ключ для нее 3 то дешифрует программа правильно. Код
alphabet = ("abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ")
ind = 0
new_msg=[]
while True:
number = key[ind]
letter = msg[ind]
new_index = (alphabet.index(letter) - number) % len(alphabet)
letter = alphabet[new_index]
new_msg.append(letter)
ind+=1
if ind >=len(list(msg)):
break
print ("Исходное сообщение:")
print(new_msg)
Вывод пограммы:
Зашифровать - 1
Расшифровать - 2
Сгенерировать пароль - 3
Выйти - 0
______________________________
Что вам нужно?1
Исходное сообщение:abc
Зашифрованное сообщение:
['z', 'M', 'S']
Коюч:
[26, 39, 45]
______________________________
Зашифровать - 1
Расшифровать - 2
Сгенерировать пароль - 3
Выйти - 0
______________________________
Что вам нужно?2
Зашифрованное сообщение:zMS
Вводите ключ по числам, если ключ введен впишите число 111
Цифрка ключа 0 :26
Цифрка ключа 1 :39
Цифрка ключа 2 :45
Цифрка ключа 3 :111
[26, 39, 45]
Если ваш ключ введен верно впишите y/n:y
Исходное сообщение:
['Z', 'Z', 'Z']
Ответы (1 шт):
Все дело в том, что в Python операция вычисления остатка для отрицательных чисел выполняется по математическим правилам, то есть −7 % 4=1 при этом знак остатка совпадает со знаком делителя. Кстити, именно такой подход является корректным (https://ru.wikipedia.org/wiki/Деление_с_остатком) в отличии от некоторых других языков программирования.
Поэтому как только у вас случается ситуация alphabet.index(letter) < number, new_index принимает значение -1, что как раз и дает ваш символ 'Z'.