2015-06-16 34 views
0

我正在使用python和我正在做一個遊戲,但有一件事我沒有得到。Python,布爾重置本身

爲什麼這個布爾值重置?我不希望boolean'powerup'重置。

def spawnPowerup() 
    number = 0 
    powerup = False 

    if (a certain thing happens, the thing happens for one frame.): 
     number = random.randint(1,2) 

    if number == 1 or powerup == True: 
     print(powerup) 
     powerup = True 
     print(powerup) 

這段代碼背後的想法是,無論什麼時候發生,我都會得到一個數字。當數字等於1時,上電應該被激活,但是由於改變整個時間的數字,我需要這個布爾值。所以,只要數字等於1,我就改變布爾值,所以當數字等於1時,if語句總是爲真。但問題是布爾重置。如果事情發生了幾次,這將是印:

False 
True 
False 
True 
False 
True 
False 
True 
+0

你是什麼意思的布爾重置?你能否再增加一些printlns來查看它是否在數字== 2時重置? –

+0

在你的第二條if語句中,'powerup'的值將始終爲假,因爲你在函數的開頭將其更改爲false – USFBS

+0

每個人都在這裏得到的是您需要查看'powerup的範圍'變量。現在因爲它在一個函數內部,所以它是一個每次都被重置的私有變量。考慮在'spawnPowerup'之外的'powerup'放在全局範圍內。這樣可以防止每次調用'spawnPowerup'時重置它,除非您在函數本身內重置它。這是一個很好的職位範圍參考http://stackoverflow.com/questions/291978/short-description-of-python-scoping-rules – Kyrubas

回答

2

powerup設置爲False每次調用此函數時。所以,當你打:

if number == 1 or powerup == True: 
     print(powerup) 
     powerup = True 
     print(powerup) 

number必須1如果輸入塊(除非你有一個未示出的其他代碼)。所以當你做第一印時,powerup仍然是False。您設置爲True,然後重新打印

+0

我不知道確切的英文術語,但如果我在功能開始時未將powerup設置爲False,則問題可能會得到解決。我也不想將它設置爲True,所以我只想對它做任何事情,但讓計算機知道它存在。我該怎麼做,或者我不能這樣做。你建議我應該怎樣解決這個問題? –

+0

聽起來像你想要一個'全局'變量。您可以在函數之外初始化它,讓函數知道它存在,並在必要時更改它。這篇文章應該有所幫助:http://stackoverflow.com/questions/423379/using-global-variables-in-a-function-other-than-the-one-that-c​​reated-them – sedavidw

2

始終爲您布爾爲False,當你進入的功能,所以自然就處於復位狀態。但這是一個局部變量;無論如何,它並不存在於函數之外。

+0

我不知道確切的英文術語,但如果我在功能開始時沒有將powerup設置爲False,問題可能會得到解決。我也不想將它設置爲True,所以我只想對它做任何事情,但讓計算機知道它存在。我該怎麼做,或者我不能這樣做。你建議我應該怎樣解決這個問題? –

1

這裏有什麼迷惑你:

if number == 1 or powerup == True: 
    print(powerup) 
    powerup = True 
    print(powerup) 

它只會打印powerup的價值在這裏。在第一條print聲明中,該值始終爲False,之後爲True。只有在執行if塊時纔會將其打印出來,並將powerup更改爲True。要詳細瞭解這一點,只需在if區塊之前添加一個print(powerup)即可。