获取错误"list indices must be integers, not str"



好的,所以代码是

    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 及其同源词是变量,只需删除引号即可。

还必须提供您尝试编制索引的列表的名称。


您最近的编辑是一个很大的改进。 这有两个关键的致命问题:

  1. 您的代码尝试在初始化之前从字典中取出内容。
  2. 您不会在引用中提供字典名称。

修复这些...

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 行中丢失的左括号。

相关内容

最新更新