2017-10-08 168 views
1

有人有一个想法,为什么我在这段代码中得到一个IndexError?IndexError:列表分配索引超出范围Python 3

  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]) 

例如,当随机为4我得到以下错误:

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

也许我的列表/阵列的声明是错误的...

回答

0

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

+0

他们必须已满?但如果我需要它们像这样的情况下,我该怎么办? – zwerg4

+0

@ zwerg4使用'lst.append(element)'将项目添加到列表'' –

0

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

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

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

+0

ty的末尾,但是现在如果我想要显示它,我必须使用下标: 'print(“* {0 } with {1} HP“.format(gegner [i-1]),gegnerhp [i-1])' 然后我得到错误: 'print(”* {0} with {1} HP“)。格式(gegner [i-1]),gegnerhp [i-1]) IndexError:元组索引超出范围' – zwerg4

+0

您有一个右括号,您不应该使用'print(“* {0} with {1 } HP“.format(gegner [i-1],gegnerhp [i-1]))'而不是。 – Neo

+0

omg,我的坏。 TY !! – zwerg4

1

有一些误解在这里,我不认为这只是解决您专门询问了一会适当的帮助,所以我打算做比那更多的。

首先,列出。您正在创建空列表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 ),因为您所做的只是将事情添加到列表的末尾,请考虑使用方法。然后它看起来像这样:

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