2015-05-06 40 views
2

我想創建一個遊戲,其中有2個計數器,a和b,並且遊戲繼續,而a不等於2(最初爲0),b不等於5(最初爲3),並且b會增加每次公主都會觸摸窗戶上的某個點。我無法保留a和b的值。我正在基於TKinter構建的Zelle的第二版圖形框架構建這款​​遊戲。我的b似乎永遠不會超過4,並且總是重置爲3,而不是達到5來停止while循環。Python:while循環,如何保持counter?

相關的代碼如下(我的形象的公主是自己的構造和方法舉措一類),該代碼處理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 
+1

b總是會重置爲3,因爲您在while循環的每次迭代開始時將其設置爲3,並且從不在任何地方更改它。 – martineau

回答

1

我會說這只是與範圍有關,但進一步挖掘似乎並非如此。

你有一個while循環,當a==2 and b==5,他們倆都初始設置爲0應該結束,但在循環,你永遠改變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嗎?因爲目前它沒有做任何事情,所以這應該足夠了:

​​

再進一步的說明,稱爲變量ab是任何人閱讀你的代碼的超級無益。命名他們有幫助。

1

你永遠不會改變b的值。也許你想在你的while循環中說b = princes.move(mouse,b),所以在那之後b可能會增加。在你的代碼中,b永遠保持值3。