2

我有一个网格作为元组的元组,整数(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

系统回答我选择的小区附近没有邻居。请解释一下有什么问题,感谢您的关注!

4

1 回答 1

3

我看到两个明显的错误:

  1. grid用一个空元组替换了

  2. 您的代码根本不引用该grid变量,您只需将 1 添加到countifpos等于 1。pos永远不会等于 1,因为您将其设置为一系列tuples之一。

因此,只要是数字,您的函数将始终返回(否则会引发异常)。0rowcol

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

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
于 2014-11-09T17:06:54.073 回答