0

我有一个列表“地图”,我想用作用于初始数组的每个位置的函数“counterPosition”的相应输出值替换所有元素,如下所示:

map[0][0] = counterPosition(0,0)
map[0][1] = counterPosition(0,1)
...

像这样一个一个地做我可以得到答案,但是当我尝试这样的事情时:

 for x in range (len(map)):
    for y in range (len(map)):
        map[x][y] = counterPosition(x,y)

它不起作用......我做错了什么吗?

编辑:

def counterPosition(x, y):
    bombs = 0
    for i in range(x-1, x+2):
        for j in range(y-1, y+2):
            if i<0 or j<0: continue
            elif map[i][j] == True:
                bombs += 1
    return bombs

map = [[True, False, False, False, False, True],
         [False, False, False, False, False, True],
         [True, True, False, True, False, True],
         [True, False, False, False, False, False],
         [False, False, True, False, False, False],
         [False, False, False, False, False, False]]

错误是:

IndexError: list index out of range
4

1 回答 1

3

你快到了

for x in range (len(map)):
    for y in range(len(map[x])):
        map[x][y] = counterPosition(x,y)

更新:您提供的原始代码只会在您的地图是方形的情况下运行,但您提供的数据就是这种情况。查看您的示例数据和更新的代码,实际错误来自您的counterPosition函数。其实有两个问题。

1. 在您的counterPosition函数中,您访问超出范围的元素。这作为错误消息的一部分打印在上面IndexError:...- 仔细阅读这些消息并将其包含在您的帖子中是个好主意。如果您传入,x=5,y-5则该函数将尝试访问map[6][6]. “正确”的代码应该是这样的

def counterPosition(x, y):
    bombs = 0
    for i in range(x-1, x+2):
        for j in range(y-1, y+2):
            # check bounds:
            if 0 <= i < len(map) and 0 <= j < len(map[i]):
                if map[i][j] == True:
                    bombs += 1
    return bombs

2.第二个问题是counterPosition 期望 map包含布尔元素,但是您返回一个整数counterPosition并将其分配给map[x][y]。所以下一轮map将包含整数值。在没有看到您项目的其余部分的情况下,我认为您想要的是两个独立的多维数组。

于 2013-02-27T22:28:12.417 回答