2013-12-21 71 views
0

這裏是我遇到問題的代碼(簡化以使其更清晰)。這是一個基於文本的遊戲只是爲了幫助學習的東西。重新評估函數以獲取python中的新隨機值

class Character(object): 
    def __init__(self): 
     self.level = 5 
     self.moveset = [None,None,None,None] 

    def movesetleveling(self): 
     if self.level > 4: 
      self.moveset[0] = Punch(self.level) 

def punch(level): 
    damagedealt = random.randint(0,5)**level 
    return damagedealt 

我想知道我怎樣才能使self.moveset[0] = Punch(),而不是等於Punch()在這個代碼塊的輸出。所以每當我在while循環中運行它時,它都會重新評估Punch()的輸出,而不是評估一次Punch()並將其分配給self.moveset[0]的第0個索引。

+2

「在一個while循環中運行它」是什麼意思?你打算如何使用'moveset'? – BrenBarn

+0

您是否想在'self.moveset'中設置四個隨機衝壓級別,或者是否希望'self.moveset'中的第一個項目在循環的每次迭代中都是一個隨機衝值? –

+0

@BrenBarn'moveset'將用於顯示選擇器的移動選擇。他們會從列表中選擇一個移動,然後進行評估,以產生一個整數值,這將成爲一個damagestat。這個傷害狀態會影響敵人的健康。我創建了一個while循環,它一遍又一遍地完成,但每次它爲'self.moveset [0]'使用相同的值,而不是獲取新的值。 –

回答

1

你可以分配功能self.moveset[0],而不是它的結果(使用functools.partial()):

from functools import partial 

self.moveset[0] = partial(punch, self.level) 

後來的後來,你while循環,只是把它:

while True: 
    new_punch_every_time = self.moveset[0]() #note: parentheses 

self.moveset[0]()電話punch功能與level參數設置爲self.level(其在partial呼叫時的值)。

它的工作原理是函數,方法是Python中的第一類公民。您可以將它們作爲參數傳遞給其他函數,從函數返回,綁定到不同的名稱,追加到列表等。

+0

'partial'?初學者? ;) – thefourtheye

+0

@thefourtheye:OP明確表示:*「幫助學習事物」*。 'functools.partial()'是要學習的東西。它不是鱷魚;如果你靠近它,它不會吃你。 – jfs

+0

不錯,但我懷疑問題可能在while循環(原始問題) –