2017-07-12 50 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])] 

换句话说,内理解创建第二轴,外创建第一个。但是你正在以相反的方式思考它。