2017-10-08 95 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)) 
相關問題