Добро пожаловать в Stackoverflow.Этот ответ закончился скорее как общий совет, чем как конкретное решение вашей проблемы, но я надеюсь, что он полезен.
Одно очевидное замечание состоит в том, что было бы неплохо не импортировать код для зашифрованного вами шифра.не собираюсь использовать.Импорт - это исполняемые операторы, так что это довольно практично.
Ваш код далек от оптимальной организации.Большая часть кода этих двух файлов одинакова или очень похожа.Это не является чем-то необычным для начинающих программистов, поскольку требуется время, чтобы научиться разбивать проблемы и извлекать общие элементы.Реальная проблема заключается в том, что, хотя он определяет множество функций, ни одна из них на самом деле не вызывается (если только нет кода, который вы не включили).
Я бы порекомендовал вам изменить свой код, чтобы былПрограмма уровня, которая собирает ключ и данные и выполняет необходимые операции вместе с вашими двумя модулями шифрования / дешифрования.Подпрограммы шифрования и дешифрования не должны вообще вводить или выводить данные, просто работают с данными.
Предположим, у вас есть переменная mtype
, которая содержит тип шифрования, который вы хотите использовать.Логика верхнего уровня может выглядеть примерно так:
if mtype == "caesar":
from caesar import encrypt, decrypt
elif mtype == "vigniere":
from vigniere import encrypt, decrypt
else:
sys.exit("Unrecognised message type")
Если этот код завершится успешно, вы получите функции encrypt
и decrypt
из правильного модуля.Это означает, что они должны иметь один и тот же интерфейс, так как ваша логика должна теперь быть написана, чтобы приспособиться к любому из них.
Остальная часть вашей логики будет выглядеть примерно так (не проверено):
operation = input("E(ncrypt) or D(ecrypt)? ")
if operation.upper().startswith("E"):
function = encrypt
elif operation.upper().startswith("D"):
function = decrypt
else:
sys.exit("Unknown operation")
message = input(...)
key = input(...)
output = function(message, key)
Мы надеемся, что это сделает ваш код более понятным, отделив ответственность ввода-вывода от задач шифрования и дешифрования.