有人知道我为什么在这段代码中得到一个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
也许我对列表/数组的声明是错误的?...
答案 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)
您的列表gegner
和gegnerhp
为空,因此访问它们会给您一个错误。
答案 2 :(得分:0)
您获得IndexError
因为列表为空。
您无法通过访问无效索引来创建列表项。使用.append
isntead。
if random == 1:
gegner.append("goblin")
gegnerhp.append(randint(10, 50))
等