繁体   English   中英

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

[英]break doesn't break while loop. why?

我正在尝试从文本文件做一个登录系统。
当我输入不在文本中的错误输入时,它会执行我想要它执行的操作,即 output“错误的用户名和密码”和“重试”并询问用户名并再次通过。
但是当我输入正确的详细信息时,循环永远不会中断。 它不断询问用户并通过。
这是我的代码:

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语句时,它只会退出当前所在的内循环,这意味着它仍然会循环外循环。 解决此问题的常用方法是将嵌套循环重构为 function 并使用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 语句实际上是在while loop内的for loop内调用的。 这意味着您正在跳出for loop ,但while loop将照常继续。

处理此问题的一个很好的替代方法是将 while 循环变成 function 并将break语句替换为return语句。 这样你的 while 循环也会停止!

正如我在评论中所说,您的break语句位于while循环内的for循环内。 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()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM