python - 如何修复由 Python 中的函数引起的这个无限循环?
问题描述
我似乎创建了一个正常工作的银行帐户登录系统。唯一的问题是,一旦登录成功,程序就会陷入循环。例如:假设我创建了我的帐户并将我的用户名设置为“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()
请注意,如果用户在 中输入"q"
,displayMenu()
而不是"Q"
. 这可以通过检查status.lower()
来解决。
2
然后你通过提供作为输入来指定不,你不是注册用户displayMenu()
。
这会将您带到newUser()
创建新帐户的地方。
然后您将返回displayMenu()
,这次您可以选择1
以注册用户身份登录,将您带到oldUser()
。
在 中输入登录凭据后oldUser()
,您将被带到mainMenu()
,它将在其中打印欢迎消息mainMenu()
,然后返回 ,然后返回oldUser()
,displayMenu()
然后返回主循环。
除非您期望在 中发生其他事情,否则mainMenu()
这里唯一的错误是您没有status
在检查它是否是之前对情况进行规范化"q"
。
推荐阅读
- java - JavaPairRDD 到数据集
在火花
- excel - How to pass an array of results in a User defined Function in Excel-VBA?
- google-chrome - 为什么我的扩展程序上出现“不支持的扩展程序已禁用”?
- load-balancing - 使用 traefik 的 Grpc 负载平衡不起作用
- python - 在 Fabric 2/Invoke 中:更改目录并使用 sudo
- javascript - 如何在servlet中获取父子复选框的值
- python - Image texture with skimage
- angular - Angular 6 - Ngx Datable - 部分实现的主题
- microsoft-graph-api - 无法使用自定义路径上传文档库文件夹中的文档
- r - GGPlot2 为 Shiny Dashboard 设计