IndexError:列表赋值索引超出范围Python 3

时间:2017-10-08 12:40:30

标签: python arrays python-3.x pycharm index-error

有人知道我为什么在这段代码中得到一个IndexError?

            global gegner
            global gegnerhp
            gegner = []
            gegberhp = []



            for i in range(1,anzahlgegner):
                random = randint(1,5)
                if random == 1:
                    gegner[i] = "goblin"
                    gegnerhp[i] = randint(10,50)
                elif random == 2:
                    gegner[i] = "ghost"
                    gegnerhp[i] = randint(10,50)
                elif random == 3:
                    gegner[i] = "hound"
                    gegnerhp[i] = randint(10,50)
                elif random == 4:
                    gegner[i] = "wolf"                        #LINE 147
                    gegnerhp[i] = randint(10,50)
                elif random == 5:
                    gegner[i] = "goblin"
                    gegnerhp[i] = randint(10, 50)
                print("* {0} with {1} HP".format(gegner[i]),gegnerhp[i])

例如,当random为4时,我收到以下错误:

  File "C:/Users/Fabio/PycharmProjects/test\dungeon.py", line 147, in run
gegner[i] = "wolf"
  IndexError: list assignment index out of range

也许我对列表/数组的声明是错误的?...

3 个答案:

答案 0 :(得分:2)

这里存在一些误解,我认为只解决你明确提出的问题会对你有所帮助,所以我要做的不仅仅是这些。

首先,列表。你正在创建空列表gegner和gegnerhp;看起来你想要在这些列表中添加一些项目,并且你试图通过指定索引来实现。在python中,列表索引从0开始,而不是1.

即。在以下列表中:

>>> gegner = ["wolf", "hound", "goblin"]
>>> print(gegner[0])
wolf
>>> print(gegner[1])
hound

索引“1”是列表中的第二个项目。

在你的代码中,你的范围(1,anzhalgegner)将从1开始,并增加到你设置anzhalgegner的任何东西。在第一次迭代中,您的代码尝试将值分配给位置1处的列表gegner - 但是,列表在位置0处没有任何内容,这意味着它无法将任何内容分配给位置1。

让你开始的最简单的改变是从0开始你的范围。

一旦你尝试了这个,我还建议不要手动指定列表中的哪个位置来放置一个项目(list [index] = value),因为你所做的只是添加东西到最后列表,请考虑使用 append 方法。然后它看起来像这样:

if random == 1:
    gegner.append("goblin")
    gegnerhp.append(randint(10,50))

答案 1 :(得分:0)

您的列表gegnergegnerhp为空,因此访问它们会给您一个错误。

答案 2 :(得分:0)

您获得IndexError因为列表为空。

您无法通过访问无效索引来创建列表项。使用.append isntead。

if random == 1:
    gegner.append("goblin")
    gegnerhp.append(randint(10, 50))