好的,所以代码是
Pdmg = (lambda x: (round(x*0.75), round(x*1.0)))(['stats']['PStrength'])
Mdmg = (lambda x: (round(x*0.75), round(x*1.0)))(['stats'['PDexterity'])
HP = 4 * ['lvl'] * ['stats']['PVitality']
Mage = {'name' : 'Mage',
'Class' : 'Player',
'Sub-Class' : 'Mage',
'lvl' : 1,
'xp' : 26,
'lvlNext' : 25,
'Weak' : {'Lightning'},
'Normal' : {'Shock'
'Burn'
'Water'
'Freeze'},
'Resistance' : {'Ice'
'Fire'},
'Null' : {'Poison'},
'stats': {'PStrength' : 5,
'PProsperity' : 5,
'PDexterity' : 15,
'PVitality' : 5,
'PAgility' : 10,
'hp' : 'HP',
'MP' : 50}}
并且我收到错误"列表索引必须是整数,而不是 str"如何解决此问题?(我也阅读了一些有类似问题的帖子,他们真的没有帮助我,所以请不要把我发送到另一个帖子。
这是你的问题:
['stats']['PVitality']
这等效于以下内容:
my_list = [
'stats'
]
my_list['PVitality']
在编辑之前很难告诉您如何解决此问题,但现在我看到了您正在使用的数据结构。
你想要这样的东西:
Mage['stats']['PStrength']
尽管Mage
必须在使用它之前对其进行定义。
小音符
惯用的 Python 不会在这里使用 lambda
,因为lambda
所做的只是避免临时变量泄漏到封闭范围内。 更惯用的是:
x = Mage['stats']['PStrength']
Pdmg = round(x*0.75), round(x*1.0)
或类似的东西:
def stat_damage(stat):
"""Calculate damage (foo, bar) from stat value."""
return round(x*0.75), round(x*.10)
但是,代码风格是一个品味问题,lambda
在这里确实可以正常工作。 对于其他Python程序员来说,这只会有点意外。
好吧,显而易见的答案是停止使用字符串作为列表索引。 如果统计数据、PStrength 及其同源词是变量,只需删除引号即可。
您还必须提供您尝试编制索引的列表的名称。
您最近的编辑是一个很大的改进。 这有两个关键的致命问题:
- 您的代码尝试在初始化之前从字典中取出内容。
- 您不会在引用中提供字典名称。
修复这些...
Mage = {'name' : 'Mage',
'Class' : 'Player',
'Sub-Class' : 'Mage',
'lvl' : 1,
'xp' : 26,
'lvlNext' : 25,
'Weak' : {'Lightning'},
'Normal' : {'Shock'
'Burn'
'Water'
'Freeze'},
'Resistance' : {'Ice'
'Fire'},
'Null' : {'Poison'},
'stats': {'PStrength' : 5,
'PProsperity' : 5,
'PDexterity' : 15,
'PVitality' : 5,
'PAgility' : 10,
'hp' : 'HP',
'MP' : 50}}
Pdmg = (lambda x: (round(x*0.75), round(x*1.0)))(Mage['stats']['PStrength'])
Mdmg = (lambda x: (round(x*0.75), round(x*1.0)))(Mage['stats']['PDexterity'])
HP = 4 * Mage['lvl'] * Mage['stats']['PVitality']
print Pdmg, Mdmg, HP
输出:
(4.0, 5.0) (11.0, 15.0) 20
我还修复了 Mdmg 行中丢失的左括号。