2d数组中的Python索引错误

2024-06-26 01:40:22 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我做了一个包含2d数组的游戏,我要求用户输入一个网格的高度和宽度,下面是生成网格的代码

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'

但是,在测试时,会出现以下错误:

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

Tags: 用户in网格游戏forif高度玩家
1条回答
网友
1楼 · 发布于 2024-06-26 01:40:22

问题是你的嵌套理解构造了一个维度为“翻转”的嵌套数组。考虑:

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

这通常被称为“矩阵”。尽管这是一个危险信号,但这是一个符号问题。最基本的问题是您正在使用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])]

换句话说,内在的理解创造了第二个轴,外在的理解创造了第一个轴。但你的想法正好相反。你知道吗

相关问题 更多 >