如何解决break 不会中断 while 循环为什么?
我正在尝试从文本文件中创建登录系统。
当我输入文本中没有的错误输入时,它会执行我想要它做的事情,即输出“错误的用户名和密码”和“重试”并要求输入用户名并再次通过。
但是当我输入正确的细节时,循环永远不会中断。它不断询问用户并通过。
这是我的代码:
def check():
users = open('student.txt').read().split('\n')
for i in range(len(users)): users[i] = users[i].split(',')
while True:
username = str(input('Username: '))
password = str(input('Password: '))
for user in users:
uname = user[3]
pword = user[4]
if uname == username and pword == password:
print('Hello ' + user[0] + '.')
print('You are logged in as: ' + user[3] + '.')
break
else:
print('Wrong username/password.')
print('Try again!\n\n')
check()
解决方法
break
总是离开立即循环结构,即“最内层”。
对于您的代码是 for
循环,而不是包含它的 while
循环。
当使用 break
语句时,它只会退出当前所在的内循环,这意味着它仍然会循环外循环。解决此问题的常用方法是将嵌套循环折射为函数并使用 return
语句退出代码。
另一种方法是添加一些 continue
语句以避免到达第二个 break
并且仅在退出内部循环时到达它。像这样:
def check():
users = open('student.txt').read().split('\n')
for i in range(len(users)):
users[i] = users[i].split(',')
while True:
username = str(input('Username: '))
password = str(input('Password: '))
for user in users:
uname = user[3]
pword = user[4]
if uname == username and pword == password:
print('Hello ' + user[0] + '.')
print('You are logged in as: ' + user[3] + '.')
break
else:
print('Wrong username/password.')
print('Try again!\n\n')
# Continue if the inner loop wasn't broken.
continue
# Inner loop was broken,break the outer.
break
,
break
语句会跳出 while
AND for
循环。尽管看起来令人沮丧,但这些 break 语句只会跳出最近的循环。如果您查看您的代码,您会发现您的 break 语句实际上是在您的 for loop
内的 while loop
内调用的。这意味着您正在突破 for loop
,但 while loop
将继续正常运行。
处理此问题的一个很好的替代方法是将您的 while 循环转换为一个函数,并将您的 break
语句替换为 return
语句。这样你的 while 循环也会停止!
正如我在评论中所说,您的 break
语句位于 for
循环内,而该循环位于 while
循环内。 break
语句不会破坏任何外部循环。
这是一个可能的解决方案
def check():
users = open('student.txt').read().split('\n')
for i in range(len(users)): users[i] = users[i].split(',')
username = str(input('Username: '))
password = str(input('Password: '))
for user in users:
uname = user[3]
pword = user[4]
while True:
if uname == username and pword == password:
print('Hello ' + user[0] + '.')
print('You are logged in as: ' + user[3] + '.')
break
else:
print('Wrong username/password.')
print('Try again!\n\n')
check()
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。