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

时间:2019-04-10 09:39:59

标签: python python-2.7 function loops

根据我之前的问题here,我今天的问题与此有关。我有一个不断更新的全局变量,并将该变量传递给函数。该函数由循环和条件语句组成。我希望循环在满足条件时结束,但仍会继续循环。

这是我的代码。

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

关于标识符类的必要部分只是更新变量。我认为问题出在我分享的课程上。我真的不知道这是如何工作的。我希望你能帮助我。

2 个答案:

答案 0 :(得分:0)

这里要注意一些事情:

  • 为什么要在循环中创建新的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变量,您正在identity类的实例中执行,因此您可以在self对象上调用this方法(类似于JS)。

答案 1 :(得分:0)

首先,您可能不需要在“验证程序”方法中创建新实例(创建实例时已经调用了方法,您可以使用“自”变量访问该实例。 因此,而不是

run=LetterAScreen()
run.identity()

self.identity()

也可以代替使用复杂的“全局”方法 您可以创建诸如self.verify之类的实例变量,并在“ identify”中进行更改

class LetterAScreen:
    def __init__(self):
        self.verify = 0

通常也这样创建的不定式循环

while True:

始终小心使用“全局”是棘手的,在大多数情况下,您可以以简单易懂的方式执行任何操作,因此,我建议您从此脚本中删除所有全局,可以从函数中返回参数,使用可变对象等。