2013-12-21 45 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循环(原始问题) –