微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

break 不会中断 while 循环为什么?

如何解决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 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?