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)
然后作为进一步说明,称为变量 a
和 b
对阅读您的代码的任何人都没有帮助。给他们起个有帮助的名字。
您永远不会更改 b 的值。也许你想在你的 while 循环中说 b = princes.move(mouse,b)
,所以在那之后 b 可能会递增。在您的代码中,b 永远保持值 3。
我正在尝试创建一个游戏,其中有 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)
然后作为进一步说明,称为变量 a
和 b
对阅读您的代码的任何人都没有帮助。给他们起个有帮助的名字。
您永远不会更改 b 的值。也许你想在你的 while 循环中说 b = princes.move(mouse,b)
,所以在那之后 b 可能会递增。在您的代码中,b 永远保持值 3。