【问题标题】:Moore neighbourhood in python蟒蛇中的摩尔社区
【发布时间】:2014-11-09 16:59:08
【问题描述】:

我有一个网格作为元组的元组,整数 (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)您将 grid 替换为空元组,2)您的代码根本没有引用 grid 变量,您只需将 1 添加到 @987654324 @ 如果 pos 等于 1。pos 永远不会等于 1,因为您将它设置为一系列 元组中的一个。因此,只要rowcol 是数字,您的函数将始终返回0(否则会引发异常)。

标签: python matrix tuples automata neighbours


【解决方案1】:

我看到两个明显的错误:

  1. 您将grid 替换为一个空元组

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

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

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

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

【讨论】:

  • 非常感谢,但它不起作用。可能因为有条件,我忘记了。前提条件:3 ≤ len(grid) ≤ 10 all(len(grid[0]) == len(row) for row in grid)
  • @laVitaEBella:这些前提条件都不是问题;您还没有清楚地定义什么输入,以及预期的输出;您的问题中没有测试用例。而且 it doesn't work 也不是什么好办法。它怎么行不通?用于什么输入?预期的输出是什么,而你得到了什么?
  • 我很抱歉对这个问题的解释很糟糕。我已经成功地克服了元组大小为 5x5 并坚持使用 3x3 元组的测试。再举一个例子:count_neighbours(((1, 1, 1), (1, 1, 1), (1, 1, 1),), 0, 2) == 3 (neighbours),问题是:“IndexError : 元组索引超出范围"
  • @laVitaEBella 我在测试上限时出错;现在更正了。你能再试一次吗?
  • 非常感谢您,先生。彼得斯,现在一切正常。我非常感谢你。可能,我必须更加努力地学习,因为这个任务在这个问题上并不难。感谢您的帮助!
猜你喜欢
  • 2017-08-18
  • 1970-01-01
  • 1970-01-01
  • 2010-10-27
  • 1970-01-01
  • 2010-10-21
  • 2016-05-28
  • 2014-08-01
  • 2021-06-28
相关资源
最近更新 更多