首页 > 解决方案 > 一旦遇到 def 行,脚本就会停止执行

问题描述

所以,我有 2 个脚本,一个 Vigenere 密码和一个 Caesar 密码,但是,当我决定在终端上发送用户想要的答案后,使用“import”将它们合并到一个“mainproject”文件中来导入脚本页面,当我完成代码并决定执行主项目时,我有一个问题是选择使用 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")

维吉内尔:

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")

任何帮助,将不胜感激!

标签: pythonpython-3.xfunctionencryption

解决方案


def定义一个函数。要实际执行它,您需要调用它。

似乎以下部分应该在decryption函数体之外,即向左缩进。它:

  • 调用直接在模块级别执行
  • 可以是一个单独的函数main,例如你可以调用

作为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()

推荐阅读