Скрипт перестает выполняться, когда встречается с линией def - PullRequest
0 голосов
/ 27 июня 2019

Итак, у меня было 2 сценария, шифр Vigenere и шифр Цезаря, однако, когда я решил объединить их в файл «mainproject», используя «import» для импорта сценария после отправки требуемого ответа от пользователяна странице терминала, когда я выполнил код и решил выполнить основной проект, у меня возник вопрос, выбрать ли использовать Vigenere или Caesar, после того, как я набрал caesar (1), он проиграл первые 2-4 строки иостановил код, как только я встретил строку «def» в обоих скриптах, если в этом проблема, я не могу использовать импорт с «def», как я могу объединить их оба в один файл, который спрашивает, какой скрипт мне бы хотелосьиспользовать?

Цезарь:

import time
import sys

print("Welcome to Caesar Cipher")
time.sleep(3)
print("Choose the corresponding number to Encrypt or Decrypt in Caesar Cipher")
def encryption():
    print("Encryption")

    print("You have chose ENCRYPTION")
    msg = input("Enter message: ")
    key = int(input("Enter key(0-25): "))  

    encrypted_text = ""

    for i in range(len(msg)):
        if ord(msg[i]) == 32:  
            encrypted_text += chr(ord(msg[i]))  

        elif ord(msg[i]) + key > 122:

            temp = (ord(msg[i]) + key) - 122   
            encrypted_text += chr(96+temp)

        elif (ord(msg[i]) + key > 90) and (ord(msg[i]) <= 96):

            temp = (ord(msg[i]) + key) - 90
            encrypted_text += chr(64+temp)

        else:

            encrypted_text += chr(ord(msg[i]) + key)

    print("Your Encrypted Message: " + encrypted_text)


def decryption():
    print("Decryption")

    print("You have chose DECRYPTION")
    encrp_msg = input("Enter encrypted Text: ")
    decrp_key = int(input("Enter key(0-25): "))

    decrypted_text = ""

    for i in range(len(encrp_msg)):
        if ord(encrp_msg[i]) == 32:
            decrypted_text += chr(ord(encrp_msg[i]))

        elif ((ord(encrp_msg[i]) - decrp_key) < 97) and ((ord(encrp_msg[i]) - decrp_key) > 90):
            temp = (ord(encrp_msg[i]) - decrp_key) + 26
            decrypted_text += chr(temp)

        elif (ord(encrp_msg[i]) - decrp_key) < 65:
            temp = (ord(encrp_msg[i]) - decrp_key) + 26
            decrypted_text += chr(temp)

        else:
            decrypted_text += chr(ord(encrp_msg[i]) - decrp_key)

    print("Text has been Decrypted: " + decrypted_text)


    choice = int(input("1. Encryption\n2. Decryption\nChoose(1,2): "))
    if choice == 1:
        encryption()
    elif choice == 2:
        decryption()
    else:
        print("Wrong Choice")

Vigenere:

import time
print("Welcome to Vigenere Cipher")
time.sleep(2)
print("Choose the corresponding number to Encrypt or Decrypt in Vigenere Cipher")
time.sleep(2.5)
def msg_and_key():
    msg = input("Enter message: ").upper()
    key = input("Enter key: ").upper()

    key_map = ""

    j=0
    for i in range(len(msg)):
        if ord(msg[i]) == 32:
            key_map += " "
        else:
            if j < len(key):
                key_map += key[j]
                j += 1
            else:
                j = 0
                key_map += key[j]
                j += 1

    return msg, key_map


def create_vigenere_table():
    table = []
    for i in range(26):
        table.append([])

    for row in range(26):
        for column in range(26):
            if (row + 65) + column > 90:

                table[row].append(chr((row+65) + column - 26))
            else:
                table[row].append(chr((row+65)+column))


    return table


def cipher_encryption(message, mapped_key):
    table = create_vigenere_table()
    encrypted_text = ""

    for i in range(len(message)):
        if message[i] == chr(32):
            encrypted_text += " "
        else:
            row = ord(message[i])-65
            column = ord(mapped_key[i]) - 65
            encrypted_text += table[row][column]

    print("Encrypted Message: {}".format(encrypted_text))


def itr_count(mapped_key, message):
    counter = 0
    result = ""

    for i in range(26):
        if mapped_key + i > 90:
            result += chr(mapped_key+(i-26))
        else:
            result += chr(mapped_key+i)

    for i in range(len(result)):
        if result[i] == chr(message):
            break
        else:
            counter += 1

    return counter


def cipher_decryption(message, mapped_key):
    table = create_vigenere_table()
    decrypted_text = ""


    for i in range(len(message)):
        if message[i] == chr(32):
            decrypted_text += " "
        else:
            decrypted_text += chr(65 + itr_count(ord(mapped_key[i]), ord(message[i])))

    print("Decrypted Message: {}".format(decrypted_text))


    print("Key and Message can only be alphabetic")
    time.sleep(1.5)
    choice = int(input("1. Encryption\n2. Decryption\nChoose(1,2): "))
    if choice == 1:
        print("You have chose ENCRYPTION")
        message, mapped_key = msg_and_key()
        cipher_encryption(message, mapped_key)

    elif choice == 2:
        print("You have chose DECRYPTION")
        message, mapped_key = msg_and_key()
        cipher_decryption(message, mapped_key)

    else:
        print("Wrong choice")

Любая помощь будет оценена!

Ответы [ 2 ]

0 голосов
/ 27 июня 2019

Добро пожаловать в 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)

Мы надеемся, что это сделает ваш код более понятным, отделив ответственность ввода-вывода от задач шифрования и дешифрования.

0 голосов
/ 27 июня 2019

def только определяет функцию.Чтобы на самом деле выполнить его, нужно вызвать его.

Кажется, следующая часть должна быть за пределами decryption тела функции, то есть с отступом слева.Это:

  • вызов будет выполнен непосредственно на уровне модуля
  • может быть отдельной функцией, например, main, которую вы можете вызвать

As main:

def main():
    choice = int(input("1. Encryption\n2. Decryption\nChoose(1,2): "))
    if choice == 1:
        encryption()
    elif choice == 2:
        decryption()
    else:
        print("Wrong Choice")

А теперь вы можете вызвать функцию main:

main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...