获取错误“列表索引必须是整数,而不是str”

2024-10-01 15:48:00 发布

您现在位置:Python中文网/ 问答频道 /正文

好吧代码是

    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}}

我得到了一个错误“list index must be integers,not str”我该怎么解决这个问题? (我也读了一些有这样问题的帖子,他们真的帮不了我,所以请不要再给我发其他帖子了。)


Tags: lambda代码namestats帖子classhpround
2条回答

好吧,显而易见的答案是停止使用字符串作为列表索引。如果stats,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

输出:

^{pr2}$

我还修复了Mdmg行中丢失的左括号。在

这是你的问题:

['stats']['PVitality']

这相当于:

^{pr2}$

在编辑之前很难告诉您如何修复这个问题,但是现在我看到了您正在使用的数据结构。在

你想要这样的东西:

Mage['stats']['PStrength']

{cd1>必须先定义它。在

小调

惯用的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程序员来说只是有点意外。在

相关问题 更多 >

    热门问题