在网格中获取角落?

Get corners in a grid?

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

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

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

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

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

解决问题的一种方法是使用您当前正在进行的计算,并将其结果与给定数字进行比较。您可以使用一堆 == 比较,或者您可以将计算出的角值放入某种容器中并使用 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):