如何在满足条件时结束循环?

按照我刚才的问题在这里,今天我的问题是有关的。我有一个不断更新的全局变量,并将该变量传递给一个函数。该函数由循环和条件语句组成。我希望循环在条件满足时结束,但它继续循环。


这是我的代码。


class LetterAScreen:

    def identity(self): 

        global where

        lol=Identifier()

        lol.fn_compare()

        print where


    def verifier(self):

        global where

        verify=where

        if verify != 1:

            while (count>0):

                print ("try again")

                run=LetterAScreen()

                run.identity()

                run.verifier

                print ("try again")

                count += 1

        else:

            print ("correct")

“正确”是当变量变为 1 时。否则,它是不正确的,用户应该再试一次。输出最终看起来像这样。


#incorrect inputs

19

try again

try again

19

try again

try again

19

try again

try again

19

try again

try again

19

try again

try again

#correct inputs but loop doesn't end

1

try again

try again

1

try again

try again

1

try again

try again

1

try again

try again

Identifier 类的基本部分只是更新变量。我相信问题出在我分享的课程上。我真的不熟悉这是如何工作的。我希望你能帮助我。


达令说
浏览 237回答 2
2回答

精慕HU

这里有一些注意事项:为什么要LetterAScreen在循环中创建新对象?使用全局变量时要小心,通常还有其他方法可以解决这个问题。我不知道Identifier该类是做什么的,但猜测该类的fn_compare功能会改变where变量吗?此外,Identifier在每次调用identity函数时创建一个新函数似乎是您应该更改的内容。话虽如此,该verifier方法需要调整如下:def verifier(self):    global where    count = 1    while (count>0 and where != 1):        print ("try again")        self.identity()        count += 1    print ("correct")您不应该将全局where变量分配给本地变量,这会导致问题,因为本地变量不会在循环中更新。您可以where直接与此全局变量进行比较。我还删除了run变量,您正在LetterAScreen类的一个实例中执行,因此您可以调用identityself 对象上的方法(类似于thisJS 中的 a )。

喵喵时光机

首先,您可能不需要在方法“验证器”中创建新实例(创建实例时已经调用了方法,您可以使用“self”变量访问实例。因此,而不是run=LetterAScreen()run.identity()写self.identity()也可以不使用复杂的“全局”方法,而是创建像 self.verify 这样的实例变量并在“identify”中更改它class LetterAScreen:    def __init__(self):        self.verify = 0不定式循环通常是这样创建的while True:始终小心使用“全局”是棘手的,在大多数情况下,您可以以简单易读的方式执行任何操作,因此我建议您从此脚本中删除所有全局变量,您可以从函数返回参数,使用可变对象等。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python