Python 脚本遇到def行时停止执行

Python 脚本遇到def行时停止执行,python,python-3.x,function,encryption,Python,Python 3.x,Function,Encryption,因此,我有两个脚本,一个Vigenere密码和一个Caesar密码,但是,当我决定在终端页面上发送用户想要的答案后,通过使用“导入”导入脚本,将它们合并到“mainproject”文件中,当我完成代码并决定执行mainproject时,我有一个问题,是选择使用Vigenere还是Caesar,一旦我输入Caesar(1),它播放前2-4行,并在两个脚本上遇到“def”行时停止代码,如果这是问题所在,我不能使用带有“def”的导入,我如何将它们合并到一个文件中,询问我要使用哪个脚本 凯撒: 导入时

因此,我有两个脚本,一个Vigenere密码和一个Caesar密码,但是,当我决定在终端页面上发送用户想要的答案后,通过使用“导入”导入脚本,将它们合并到“mainproject”文件中,当我完成代码并决定执行mainproject时,我有一个问题,是选择使用Vigenere还是Caesar,一旦我输入Caesar(1),它播放前2-4行,并在两个脚本上遇到“def”行时停止代码,如果这是问题所在,我不能使用带有“def”的导入,我如何将它们合并到一个文件中,询问我要使用哪个脚本

凯撒:

导入时间
导入系统
打印(“欢迎来到凯撒密码”)
时间。睡眠(3)
打印(“选择要在Caesar密码中加密或解密的相应数字”)
def encryption():
打印(“加密”)
打印(“您选择了加密”)
msg=输入(“输入消息:”)
key=int(输入(“输入键(0-25):”)
加密的_text=“”
对于范围内的i(len(msg)):
如果ord(msg[i])==32:
加密文本+=chr(ord(msg[i]))
elif ord(信息[i])+键>122:
温度=(命令(信息[i])+键)-122
加密文本+=chr(96+温度)
elif(作战需求文件(信息[i])+密钥>90)和(作战需求文件(信息[i])90):
温度=(ord(encrp_msg[i])-decrp_键)+26
解密的_text+=chr(temp)
elif(ord(encrp_msg[i])-规定键)<65:
温度=(ord(encrp_msg[i])-decrp_键)+26
解密的_text+=chr(temp)
其他:
解密的\u text+=chr(ord(encrp\u msg[i])-解密密钥)
打印(“文本已解密:+解密文本)
choice=int(输入(“1.加密\n2.解密\n选择(1,2):”)
如果选项==1:
加密()
elif选项==2:
解密()
其他:
打印(“错误选择”)
维格纳:

导入时间
打印(“欢迎使用Vigenere Cipher”)
时间。睡眠(2)
打印(“选择要在Vigenere Cipher中加密或解密的相应数字”)
时间。睡眠(2.5)
def msg_和_键():
msg=input(“输入消息:”).upper()
键=输入(“输入键:”).upper()
key_map=“”
j=0
对于范围内的i(len(msg)):
如果ord(msg[i])==32:
键映射+=“”
其他:
如果j90:
结果+=chr(映射_键+(i-26))
其他:
结果+=chr(映射的_键+i)
对于范围内的i(len(result)):
如果结果[i]==chr(消息):
打破
其他:
计数器+=1
返回计数器
def密码解密(消息、映射密钥):
table=创建_vigenere_table()
解密的_text=“”
对于范围内的i(len(message)):
如果消息[i]==chr(32):
已解密的_text+=“”
其他:
解密文本+=chr(65+itr计数(ord(映射密钥[i]),ord(消息[i]))
打印(“解密消息:{}”。格式(解密文本))
打印(“密钥和消息只能按字母顺序排列”)
时间。睡眠(1.5)
choice=int(输入(“1.加密\n2.解密\n选择(1,2):”)
如果选项==1:
打印(“您选择了加密”)
消息,映射的\u key=msg\u和\u key()
密码加密(消息、映射密钥)
elif选项==2:
打印(“您选择了解密”)
消息,映射的\u key=msg\u和\u key()
密码解密(消息、映射密钥)
其他:
打印(“错误选择”)
任何帮助都将不胜感激

def
仅定义一个函数。要真正执行它,您需要调用它

下面的部分似乎应该在
解密
函数体之外,即向左缩进。它:

  • 调用可以直接在模块级执行
  • 可以是单独的函数,例如可以调用的
    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()

欢迎来到Stackoverflow。这个答案更多的是作为一般性的建议,而不是针对你的问题的具体解决方案,但我希望它能有所帮助

一个明显的评论是,不必为您不打算使用的密码导入代码会很好。 导入是可执行语句,因此这非常实用

您的代码远远没有达到最佳组织。两个文件中的大部分代码相同或非常相似。这对于新程序员来说并不罕见,因为学习如何分解问题并提取公共元素需要一段时间。真正的问题是,虽然它定义了很多函数,但实际上没有一个函数被调用(除非有更多的代码没有包含在内)

我建议您修改代码,以便有一个顶级程序来收集密钥和数据并执行所需的操作,以及您的两个 加密/解密模块。加密和解密例程不应该这样做
if mtype == "caesar":
    from caesar import encrypt, decrypt
elif mtype == "vigniere":
    from vigniere import encrypt, decrypt
else:
    sys.exit("Unrecognised message type")
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)