所以我正在制作一个涉及二维数组的游戏,我要求用户输入一个网格高度和宽度,这里是制作网格的代码
Grid=[['O'for x in range(gridS[0])]for y in range(gridS[1])]
我稍后将gridS [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'
然而,在测试时,它出现了这个错误:
>>> 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 :(得分: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])]
换句话说,内部理解创造第二个轴,外部创造第一个轴。但你正在以相反的方式思考它。