根据我之前的问题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
关于标识符类的必要部分只是更新变量。我认为问题出在我分享的课程上。我真的不知道这是如何工作的。我希望你能帮助我。
答案 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:
始终小心使用“全局”是棘手的,在大多数情况下,您可以以简单易懂的方式执行任何操作,因此,我建议您从此脚本中删除所有全局,可以从函数中返回参数,使用可变对象等。