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

标签 python class graphics while-loop

我正在尝试创建一个游戏,其中有 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)

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

关于Python:while循环,如何保持计数器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30074975/

相关文章:

python - 如何在 python 中使用 mechanize 发送带有 post 请求的原始 JSON 数据

java - 创建和访问 Vector 类

c++ - 如何在 C++ 中使用 glutBitmapString() 将文本绘制到屏幕上?

java - getGraphics 和 paintComponent 的图形对象之间的区别

graphics - RGB滤镜用于不同形式的色盲

python - python3.5 linux (CentOS7) matplotlib 1.5.x 安装问题

python - 创建一个以零为中心的白色颜色图

python - 如何获取python3中protobuf的RepeatedCompositeContainer或RepeatedScalarContainer包含的类型?

c++ - 创建一个零宽度和零高度的数组?

php - 为什么在类的构造函数中定义 undefined variable 时会出现错误?