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

时间:2015-05-06 11:08:20

标签: python class graphics while-loop

我正在尝试创建一个游戏,其中有2个计数器,a和b,游戏继续而a不等于2(最初为0)且b不等于5(最初为3),并且b将每次公主都会触及窗户上的某个点。我在保留a和b值时遇到问题。我正在使用基于TKinter构建的Zelle第二版图形框架构建此游戏。我的b似乎永远不会超过4,并且总是重置为3而不是达到5以停止while循环。

相关代码如下(我的图像公主是一个具有自己的构造函数和方法移动的类),对于处理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

2 个答案:

答案 0 :(得分:1)

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

你有一个while循环,它应该在a==2 and b==5时结束,它们最初都设置为0,但在循环中,你永远不会改变{{1因此,第一个条件将始终为a,并且您将获得无限循环。

您的true始终会恢复为b,因为您在循环中有3,并且您从未将其设置为其他任何内容。我假设b=3函数返回新位置princess.move(...)

此外,循环结束时的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) a对于阅读代码的人来说是无用的。有用地命名。

答案 1 :(得分:1)

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