我正在尝试提出一个代码,该代码将对台式游戏中用于个人使用的单位进行统计分析。我正在使用字典来存储单位数据,并且遇到了一个问题,即攻击造成的损害可能是整数值,也可能是掷骰子“ d6”的结果。
我制作了一个函数,其值为d6并将其评估为d(6),然后运行简单的计算以确定平均可拍摄张数3.5。为了方便起见,我希望能够在字典中保留“ d(6)”,而不是为要放入的每个单元手动转换为3.5。
在单元字典的精简示例中,
unit = {'damage':1}
或
unit = {'damage':'d(6)'}
我正在寻找一种检查“损坏”调用的方法,以了解该值是整数还是字符串,然后如果它是字符串,请从中去除引号并将其评估为函数。我的搜索没有很多运气,因为我真的不知道自己在搜索什么。
答案 0 :(得分:3)
使字典中的每个单个值保持一致,并返回一个可以调用的lambda函数,在调用d
函数之前,不会对其进行评估。
>>> unit = {'damage': lambda: 1, 'b': lambda: d(6) }
>>> unit['damage']()
1
>>> unit['b']()
result of d(6)
答案 1 :(得分:0)
这几乎是一个观点问题。您可以将字典的内容与suggested by @Sayse保持一致,也可以在使用时对其进行测试。但无论哪种情况,都不应使用字符串,而应使用可调用的字符串来直接调用它,而无需使用皱着眉头的eval
:
def process (dic, key):
return dic[key]() if callable(dic[key]) else dic[key]
...
damage = process(unit, 'damage')
Python使使用参数化函数变得容易。例如,如果要返回d(6)
的值,则可以使用lambda:
unit = {'damage': (lambda : d(6))}
或functools.partial
:
unit = {'damage': functools.partial(d, 6)}