2017-05-16 27 views
0

a,b和c是預定義函數,它們是更大代碼的一部分。 代碼總是返回,即使選擇的是enemy_def 我試圖打印每一個,但沒有發生的elif的部分從列表中隨機選擇一個函數,然後對結果應用條件

a = enemy_hit 
b = enemy_def 
c = enemy_sphit 
d = [a,b,c] 
enemyresponse = random.choice(d)() 
#print(enemyresponse) 
if enemyresponse == b : 
    thing.health = thing.health - 0.25 
    #print(enemyresponse) 
elif enemyresponse != b : 
    #print(enemyresponse) 
    thing.health = thing.health - 1 

回答

1

enemy_reponse絕不等於b *,因爲enemy_reponse是函數的返回值,而不是功能本身。請注意,您如何立即調用函數後隨機選擇它:

random.choice(d)() 
#    ^Called it 

保存已被選定在一個叫chosen_function(或類似的東西)變量的函數,然後檢查對抗。

你大概意思是這樣的(未經測試):

a = enemy_hit 
b = enemy_def 
c = enemy_sphit 
d = [a,b,c] 

# Randomly get function from list 
chosen_function = random.choice(d) 

# Call it to get the return value 
func_return = chosen_function() 
print(func_return) 

if chosen_function == b: 
    thing.health = thing.health - 0.25 

else: 
    thing.health = thing.health - 1 

*除非b回報本身,這似乎不太可能。

+0

是他們解決這個問題的方法我可以隨意選擇而不需要調用,我的意思是我可以將它稱爲wihin if \ else語句,或者如果我沒有將函數分配給變量,我可以這樣做 –

+0

@HananFares是的,在調用「選擇」後放置'()'。這是那些導致函數被調用的括號。 – Carcigenicate

+0

我試過了,但它返回的是:函數啓動。 .enemy_sphit at 0x005E84F8> –

相關問題