我正在尝试创建一个游戏,其中有 2 个计数器,a 和 b,并且游戏继续,而 a 不等于 2(最初为 0)并且 b 不等于 5(最初为 3),并且 b 将每次公主触摸 window 上的某个点时都会增加。我在保留 a 和 b 值时遇到问题。我正在基于 TKinter 构建的 Zelle 第二版图形框架上构建这个游戏。我的 b 似乎从来没有超过 4,并且总是重置回 3,而不是达到 5 来停止 while 循环。
相关代码如下(我的形象公主是一个类,有自己的构造函数和方法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 和 b==5
时结束,它们最初都设置为 0
,但在循环,您永远不会更改 a
,因此第一个条件将始终为 true
,并且您将获得无限循环。
您的 b
始终会恢复为 3
,因为循环中有 b=3
,并且您从未将其设置为任何内容别的。我假设 princess.move(...)
函数返回新位置 b
。
此外,循环末尾的继续
是完全多余的。
试试这个:
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
对于任何阅读您的代码的人来说都是非常没有帮助的。给它们起个有帮助的名字。
关于Python:while循环,如何保持计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30074975/