проблема дешифрования с помощью nameerror - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь расшифровать зашифрованное сообщение, используя шифр 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
...