蟒蛇的摩尔邻里

时间:2014-11-09 16:59:08

标签: python matrix tuples automata neighbours

我有一个网格作为带有整数(1/0)的元组元组,一个单元格的行号和列号作为整数。我必须找到有多少相邻单元格将邻居作为整数。

这是来自www.checkio.org的一项任务,这是一个有趣的学习python的网站。

这是我的代码:

def count_neighbours(grid, row, col):
    grid = ()
    count = 0
    for pos in ((row - 1, col), (row + 1, col), (row, col - 1), (row, col + 1), (row - 1, col - 1), (row - 1, col + 1), (row + 1, col - 1), (row + 1, col + 1)):
        if pos == 1:
            count += 1
    return count

系统回答我在所选单元附近没有邻居。请解释我的错误,并感谢您的关注!

1 个答案:

答案 0 :(得分:3)

我看到两个明显的错误:

  1. 您将grid替换为空元组

  2. 您的代码根本没有引用grid变量,如果count等于1,您只需向pos添加1 pos将永远不会等于1,因为您将其设置为一系列元组之一。

  3. 因此,只要0row为数字,您的函数将始终返回col。否则会引发异常。

    您需要实际引用传入的网格:

    def count_neighbours(grid, row, col):
        count = 0
        for pos in (
                (row - 1, col), (row + 1, col), (row, col - 1),
                (row, col + 1), (row - 1, col - 1), (row - 1, col + 1),
                (row + 1, col - 1), (row + 1, col + 1)):
            if grid[pos[0]][pos[y]] == 1:
                count += 1
        return count
    

    我假设网格是表示行和单元格的列表列表。

    接下来,你必须处理你的位置超出界限;第一行顶部没有邻居,例如:

    def count_neighbours(grid, row, col):
        count = 0
        for x, y in (
                (row - 1, col), (row + 1, col), (row, col - 1),
                (row, col + 1), (row - 1, col - 1), (row - 1, col + 1),
                (row + 1, col - 1), (row + 1, col + 1)):
            if not (0 <= x < len(grid) and 0 <= y < len(grid[x])):
                # out of bounds
                continue
            if grid[x][y] == 1:
                count += 1
        return count