2017-07-12 51 views
1

,所以我做涉及二維數組一個遊戲,我要求用戶輸入一個網格的高度和寬度,這裏是使電網Python的索引錯誤

Grid=[['O'for x in range(gridS[0])]for y in range(gridS[1])] 

我的代碼後來改變電網[0]和1的gridx和Y

然後我嘗試的玩家加入到網格,我再次詢問用戶有多少玩家(存儲在變量的對手)在玩,然後加入很多玩家

  if opponents>0: 
      Grid[gridX-1][gridY-2]='P' 
      if opponents>1: 
       Grid[0][(gridY-2)]='P' 
       if opponents>3: 
        Grid[gridX-1][0]='P' 

ho當測試時,它出現了這個錯誤:

>>> How many bots do you want to play against? 
>>> 10 
>>> Please enter a number between 0 and 3 
>>> 2 
2 

    Grid[gridX-1][gridY-2]='P' 
IndexError: list assignment index out of range 
+0

這是一個*列表*不是數組。 –

+0

我的老師說數組 - 我的不好 –

+0

這是一個迂腐點,鬆散地說,它可以被稱爲數組,但最好是精確的。 –

回答

1

問題是你的嵌套理解構造了維度「翻轉」的嵌套數組。試想一下:

>>> dims = (4, 2) 
>>> GRID = [['0' for x in range(dims[0])] for y in range(dims[1])] 
>>> GRID 
[['0', '0', '0', '0'], ['0', '0', '0', '0']] 

這通常被稱爲2X4 「矩陣」。雖然這是一面紅旗,但這是一個符號問題。根本問題是您使用gridX, gridY = dims索引第一個軸。所以:

>>> x, y = dims 
>>> x 
4 
>>> len(GRID) 
2 
>>> GRID[x] 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
IndexError: list index out of range 

爲了解決一切問題,使用以下理解:

Grid=[['O'for y in range(gridS[1])]for x in range(gridS[0])] 

換句話說,內理解創建第二軸,外創建第一個。但是你正在以相反的方式思考它。