Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/298.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复由Python函数引起的无限循环?_Python_Function_Loops - Fatal编程技术网

如何修复由Python函数引起的无限循环?

如何修复由Python函数引起的无限循环?,python,function,loops,Python,Function,Loops,我似乎创建了一个正常工作的银行帐户登录系统。唯一的问题是,一旦登录成功,程序就会陷入循环。例如:假设,我创建了我的帐户,并将我的用户名设置为“Hello”,密码设置为“123” 程序将删除这些登录详细信息,但当我稍后尝试使用它们登录时,将发生无限循环 我尝试通过插入状态的返回/全局值来修正这个问题,甚至将它们放在程序中尽可能多的地方,但无限循环问题仍然存在。你能帮我找到为什么循环一直在执行吗 users = {} status = ""

我似乎创建了一个正常工作的银行帐户登录系统。唯一的问题是,一旦登录成功,程序就会陷入循环。例如:假设,我创建了我的帐户,并将我的用户名设置为“Hello”,密码设置为“123”

程序将删除这些登录详细信息,但当我稍后尝试使用它们登录时,将发生无限循环

我尝试通过插入状态的返回/全局值来修正这个问题,甚至将它们放在程序中尽可能多的地方,但无限循环问题仍然存在。你能帮我找到为什么循环一直在执行吗


users = {}
status = ""

                            #--------------- Login menu -----------------#
def displayMenu():
    global status

    status = input("Are you a registered user? \n1 - Yes \n2 - No \nQ - Quit \n")  
    if status == '1':
        oldUser()
    elif status == '2':
        newUser()
    return status


def mainMenu():
    print("Hello account holder", login,"what service would  you like to use today?")

                            #---------- Screen for new users -------------#

def newUser():
    createLogin = input("Create login name: ")

    if createLogin in users: # check if login name exists
        print ("\nLogin name already exists!\n")
    else:
        createPassw = input("Create password: ")
        users[createLogin] = createPassw # add login and password
        print("\nAccount created!\n")     

                            #---------- Screen for old users -------------#

def oldUser():
    global login

    login = input("Enter login name: ")
    passw = input("Enter password: ")

    # check if user exists and login matches password
    if login in users and users[login] == passw:
        print("\nLogin successful!\n")
        mainMenu()

    else:
        print("\nUser doesn't exist or wrong password!\n")



# Main -------------------------------------------------------------------------------------------------------------


while status != "q":
    status = displayMenu()





您的代码完全按照设计工作

主循环开始:

while status != "q":
    status = displayMenu()
请注意,只有当用户在
displayMenu()
中输入
“q”
,而不是
“q”
,您的程序才会“退出”。这可以通过检查
status.lower()
来解决

然后通过提供
2
作为
displayMenu()
的输入来指定否,即您不是注册用户

这会将您带到
newUser()
,在这里您可以创建新帐户

然后,您将返回到
displayMenu()
,此时您可以选择
1
以注册用户身份登录,进入
oldUser()

oldUser()
中输入登录凭据后,您将进入
mainMenu()
,它将在
mainMenu()
中打印欢迎消息,然后返回到
oldUser()
,然后返回到
displayMenu()
,然后返回主循环


除非您希望在
main menu()
中发生其他情况,否则这里唯一的错误是,在检查
状态是否为
“q”

之前,您没有将
状态的大小写标准化。请将您的代码移到问题中的代码块中,而不是.png文件中。这有助于人们帮助你,允许他们复制你的代码来测试自己。请不要发布它的图片。你需要精确地描述“无限循环将发生”。您是否看到回溯,机器是否冻结,是否没有按您预期的方式退出?当前代码似乎只有一个可能的无限循环,即
whilestatus…
。其他函数没有任何递归的可能性:
displayMenu->oldUser->Main menu
displayMenu->newUser
displayMenu
,除非您重写了
input
print
。Main之后的最后一个“while”循环看起来总是会执行,因为状态永远不会是“q”,除非用户键入“q”退出。尝试使用另一个变量来处理菜单或退出操作?我解决了这个问题。基本上,我已经删除了main下的最后一个while循环,只放了displayMenu(),所以它只运行一次。然后在函数中,我将newUser链接到mainMenu(),将oldUser()链接到mainMenu()。我希望这是有道理的!程序的最后一部分就是问题所在——我只需将displayMenu()放入其中,它就可以运行一次。我所需要做的就是将每个函数链接到mainMenu(),以便在用户创建帐户后显示欢迎消息。你的解释为我澄清了一切:)谢谢you@MorganMatthews-阅读欢迎来到SO。既然你已经解决了你的问题,请考虑关闭你的问题或接受一个答案,使问题不显示为“未回答”。