2016-10-22 30 views
-1

我有一個類並且在其中有一個有一個循環的方法。我想要做的就是在頂部只運行一次陳述milliseconds = 0如何在Python中僅從語句中獲取一次值

但是,當我運行附加的代碼,它保持重置爲0.然後,我想要的是,如果經過,每毫秒可以增加200毫秒。我曾嘗試將milliseconds = 0置於班級之下或班外,並且不起作用。我能做什麼?

編輯:我的新問題,我該如何使它可以計數到5000毫秒前進展到下一段代碼。

class Flag(): 
    def Flagrun(self): 
     flagactive = 'No' 
     milliseconds = 0 
     flaggen = str(randint(1,4)) 
     milliseconds += 200 
     print(milliseconds) 

    if milliseconds > 1000: 
     if flaggen == '1': 
      window.blit(flag, (58,89)) 
      collisiondet() 
      flagactive = 'Yes' 
      milliseconds = 0 

     elif flaggen == '2': 
      window.blit(flag, (464,82)) 
      collisiondet() 
      flagactive = 'Yes' 
      milliseconds = 0 

     elif flaggen == '3': 
      window.blit(flag, (343,215)) 
      collisiondet() 
      flagactive = 'Yes' 
      milliseconds = 0 

     elif flaggen == '4': 
      window.blit(flag, (66,535)) 
      collisiondet() 
      flagactive = 'Yes' 
      milliseconds = 0 
+0

如果你的'if'語句裏面的功能?在'flagrun'裏面,'milliseconds = 0'創建一個局部變量。 – cdarke

+0

你做了什麼,把它放在「課下或課外」,沒有奏效? – TWReever

+0

循環在哪裏?似乎代碼不完整。正如@cdarke所說的,你在函數中放了幾毫秒,所以它是一個局部變量。 – Flickerlight

回答

0

我想你需要一個共享變量來創建多個類對象。

注意:我不會更改您的代碼邏輯,我只是​​更新代碼以在Flag類的每個對象上重新使用可變的毫秒數。

代碼:

class Flag(): 

_shared_state = {} 
milliseconds = 0 

def __init__(self): 
    self.__dict__ = self._shared_state 


def Flagrun(self): 
    flagactive = 'No' 
    flaggen = str(randint(1,4)) 
    self.milliseconds += 200 
    print(milliseconds) 

    if milliseconds > 1000: 
     if flaggen == '1': 
      window.blit(flag, (58,89)) 
      collisiondet() 
      flagactive = 'Yes' 
      milliseconds = 0 


     elif flaggen == '2': 
      window.blit(flag, (464,82)) 
      collisiondet() 
      flagactive = 'Yes' 
      milliseconds = 0 


     elif flaggen == '3': 
      window.blit(flag, (343,215)) 
      collisiondet() 
      flagactive = 'Yes' 
      milliseconds = 0 


     elif flaggen == '4': 
      window.blit(flag, (66,535)) 
      collisiondet() 
      flagactive = 'Yes' 
      milliseconds = 0 
+0

一個 「錯字」 - 你需要'self.milliseconds',而不是'milliseconds'在所有'Flagrun' – furas

+0

類標誌(): _shared_state = {} 毫秒= 0 高清__init __(個體經營): 自我。 __dict__ = self._shared_state DEF Flagrun(個體): flagactive = '否' 毫秒= 0 flaggen = STR(randint(1,4)) 毫秒+ = 200 打印(毫秒) 如果毫秒> 1000: 如果flaggen =='1': 窗口。blit(flag,(58,89)) collisiondet() flagactive ='是' 毫秒= 0 –

+0

這是一個錯誤。哎呦。在正常的回答事情中生病了。 –

0

(你真的應該問一個新問題在新的崗位)

如果你不關心程序在做什麼,你只是想讓它等待5秒鐘,然後您可以import time,然後使用time.sleep(5)。這會使程序停用五秒鐘,這可能不是你想要的。

如果你只是想繼續確認程序它擊中5000之後的小櫃檯,你有兩個選擇:

while milliseconds < 5000: 
    milliseconds += 1 

之後毫秒命中5000以上,它只會退出循環,並繼續。

如果你想有別的東西增加毫秒變量,那麼就必須包含任何增加毫秒任何循環,這樣做:

while stuff_happens: 
    # somehow increase milliseconds 

    if milliseconds >= 5000: 
     break 


# then more code can run 
+0

儘管while語句不會等待5000毫秒。 while循環根據計算機以不同的速度執行。我的電腦在不到1毫秒的時間內完成了代碼。你想要的東西就像'last = time.time(); while time.time() - last <5; continue'。雖然,這是problaby不是最好的原因,因爲它會在while循環期間消耗更多的處理器能力。你可能應該放入'time.sleep(x)',但這會降低它的準確性。 –

+0

我已經試過time.sleep,但它停止了不是我想要的整個代碼。當我得到機會時,我會嘗試一下while循環,但是像nort說的那樣,它會在少於一毫秒內完成。我需要一個實際的毫秒計時器。 –

+0

好,所以我嘗試了毫秒小於5000的時候,把它加1。所以它在技術上是有效的,它需要花費相當多的時間才能達到5000,但是由於某種原因它凍結了整個遊戲。當我啓動遊戲時,它正在等待它達到5000,然後再繼續等待下一段代碼。有沒有辦法解決這個問題,只有這一塊代碼正在等待進展。再次感謝。 –

相關問題