Python: while循环,如何保持计数器?

Python: while loop, how to keep counter?

我正在尝试创建一个游戏,其中有 2 个计数器 a 和 b,当 a 不等于 2(最初为 0)且 b 不等于 5(最初为 3)时游戏继续,并且b 会在每次公主触摸 window 上的某个点时增加。我无法保留 a 和 b 值。我正在基于 TKinter 构建的 Zelle 第二版图形框架上构建这款游戏。我的 b 似乎从未超过 4,并且总是重置回 3 而不是达到 5 以停止 while 循环。

相关代码如下(我的形象公主是一个class,有自己的构造函数和方法move),对于处理b的代码:

.... (irrelevant class informtion) ...

# I did not pass b into the __init__ 
# I only passed it into the move method, is that fine?

def move( self, mouse, b ):
    dX = 0
    if mouse.getY() > 300:
        dY = 2
    else:
        dY = -2

    self.img.move( dX, dY )

    if self.img.getAnchor().getY() == 350:
        newB = b + 1
        return newB
    else:
        return b

.....(无关代码)...

while a != 2 or b!= 5:

    mouse = win.getMouse()
    b = 3

    princess.move( mouse, b )

    newB = princess.move( mouse, b )

    continue

我会说这只是与范围有关,但进一步挖掘似乎并非如此。

你有一个 while 循环,它应该在 a==2 and b==5 时结束,它们最初都设置为 0,但在循环中,你永远不会改变 a ,所以第一个条件总是 true,你会得到一个无限循环。

你的 b 总是恢复到 3 因为你有 b=3 在循环中,而且你从未将它设置为其他任何东西。我假设 princess.move(...) 函数 returns 新位置 b.

此外,循环末尾的continue完全是多余的。

试试这个:

a,b = 0,0
while a != 2 or b!= 5:
    mouse = win.getMouse()
    b = princess.move(mouse, b)

附带说明一下,您是否也打算与 a 一起在其中做点什么?因为目前它没有做任何事情,所以这应该足够了:

b = 0
while b!= 5:
    mouse = win.getMouse()
    b = princess.move(mouse, b)

然后作为进一步说明,称为变量 ab 对阅读您的代码的任何人都没有帮助。给他们起个有帮助的名字。

您永远不会更改 b 的值。也许你想在你的 while 循环中说 b = princes.move(mouse,b),所以在那之后 b 可能会递增。在您的代码中,b 永远保持值 3。