我有一个网格作为带有整数(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
系统回答我在所选单元附近没有邻居。请解释我的错误,并感谢您的关注!
答案 0 :(得分:3)
我看到两个明显的错误:
您将grid
替换为空元组
您的代码根本没有引用grid
变量,如果count
等于1,您只需向pos
添加1 pos
将永远不会等于1,因为您将其设置为一系列元组之一。
因此,只要0
和row
为数字,您的函数将始终返回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