Я пытаюсь расшифровать зашифрованное сообщение, используя шифр Vigenere. Существует специальное сообщение c, которое я использую для исходного сообщения («орел приземлился»), и специальный ключ c («связанный»). Я создал все другие функции, необходимые для подачи функции decrypt (). Это для домашней работы, и я следовал рубри c для функций, которые нужно было создать и вызвать из указанных функций. Функция расшифровки требует вызова get_plain_text_char:
def get_plain_text_char(coded_char, key_char, vig_square):
row_index = get_row_index(key_char, vig_square)
col_index = vig_square[row_index].index(coded_char)
plain_text_char = vig_square[0][col_index]
return plain_text_char
Проблема, с которой я сталкиваюсь с моей функцией decrypt (), заключается в том, где использовать key_char из ранее упомянутой функции. Когда я реализую for key_char in key:
, я получаю правильный символ каждый 6-й символ. Я знаю, что если я удалю key_char для l oop, это устранит проблему, однако я не смогу запустить программу, если удаляю ее из-за того, что NameError не использует key_char. Пожалуйста, сообщите.
def decrypt(coded_msg, key, vig_square):
original_msg = []
i = 0
j = 0
for coded_char in coded_msg:
for key_char in key:
if coded_char.isalpha():
msg_char = get_plain_text_char(coded_char, key_char, vig_square)
original_msg.append(msg_char)
if i == (len(key) - 1):
i = 0
j += 1
else:
i += 1
j += 1
else:
original_msg.append(coded_char)
if i == (len(key)):
i = 0
j += 1
else:
j += 1
decoded_msg = ''.join([str(k) for k in original_msg])
print("Decoded message: ", decoded_msg)
return decoded_msg