【问题标题】:Get corners in a grid?在网格中获取角落?
【发布时间】:2017-03-12 20:31:11
【问题描述】:

我有一个网格,其函数定义为:

def getCorners(width, height, tile1)

假设网格看起来像这样:

1 2 3 4 
5 6 7 8

在这种情况下,我需要找到 1、4、5 和 8。我确定了变量,我相信它们会起作用。

firsttile = 1  # This is the first tile of the grid
TR_tile = width  # Top right tile
max = width * height
BL_tile = max - width + 1  # Bottom left tile
lasttile = max  # This is the last tile of the grid

我想尝试编写适用于每个网格的条件语句,无论大小如何。

我希望这是有道理的。感谢您的帮助!

【问题讨论】:

  • 你的意思是你的网格有不相等的行吗?我不得不说它没有右下角,你需要给它加一个 15。
  • 请编辑您的答案以展示您的网格是什么样的,您是否想要给定数组的所有可能的网格?
  • grid 中的行长度不同。这使得假设它是如何布置的很棘手。你打算这样吗。请edit您的问题并修复示例网格。
  • 我不明白你在这里实际要求什么。你想要什么样的条件语句?检查给定的瓷砖是否是角落瓷砖之一?为什么不使用包含您计算的四个值的集合进行 in 检查?
  • 比如说 width=5,height=5 和 tile number 是 17。我想使用我创建的变量检查 17 是否在网格的四个角中。

标签: python tile


【解决方案1】:

如果我正确理解了您的问题,您想测试给定数字是否位于由宽度和高度定义的网格的角上。你目前有代码来计算角落瓷砖的数量,但你不知道从那里去哪里。

解决问题的一种方法是使用您当前正在进行的计算,并将其结果与给定的数字进行比较。您可以使用一堆 == 比较,或者您可以将计算出的角值放入某种容器中,然后使用 in 一次进行所有比较:

# do your code first, then...
if tile1 == firsttile or tile1 == TR_tile or tile1 == BL_tile or tile1 == lasttile:

或者:

if tile1 in (firsttile, TR_tile, BL_tile, lasttile):

这种方法可行,但不是最有效的。一种更好的方法是将瓷砖编号除以宽度,然后使用结果和余数来判断瓷砖在哪一列和哪一行。角落瓷砖位于第一行和最后一列(任意组合)。请注意,对于零索引图块,计算更清晰。如果您需要坚持使用从 1 开始的瓷砖编号,则需要先减去一个:

# no setup computation needed
row, column = divmod(tile1-1, width)
if (row == 0 or row == height-1) and (column == 0 or column == width-1):

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    相关资源
    最近更新 更多