5

有人有一个想法,为什么我在这段代码中得到一个 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

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

4

3 回答 3

3

这里有很多误解,我认为只解决你特别询问的问题不会有适当的帮助,所以我会做更多的事情。

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

即在以下列表中:

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

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

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

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

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

if random == 1:
    gegner.append("goblin")
    gegnerhp.append(randint(10,50))
于 2017-10-08T13:06:36.113 回答
2

你得到一个,IndexError因为列表是空的。

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

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

等等

于 2017-10-08T12:53:10.853 回答
0

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

于 2017-10-08T12:43:34.357 回答