从板上找到中心件

时间:2016-11-28 17:41:00

标签: python-2.7 loops while-loop boolean

我被困在一个关于从董事会获得核心的问题上。 例如,如果董事会是3x3,那么我只会返回" center"如果瓷砖编号是" 5"。如果董事会是2x2,那么我会回到" center"对于每一块瓷砖。由于我对这个问题进行了硬编码,我遇到了问题。到目前为止,我有:

def getMiddle(width, height, tile):
width = width
height = height
tile = tile


while width*height == 1 or 2 or 4:
    return "center"
while width*height == 9:
     if tile == 5:
        return "center"
     else:
        return "not center"

这是我的一般方法,但我被告知这是硬编码。 我后来发现我应该在我的代码顶部使用这些函数并在我的代码中使用它们。防爆。如果行== 0:等等

row = (tile - 1) // width 
col = (tile - 1) % width

我真的迷失了如何使用上述函数开始编码,以创建一般解决方案,这样我就不会硬编码。非常感谢!

1 个答案:

答案 0 :(得分:2)

我不会为您创建解决方案,但会尽力帮助您创建解决方案。

要找到一般解决方案,您需要概括问题描述(不像电路板可以是2x2或3x3,但在某些一般术语中)。所以。你有两个选择:董事会的一方是偶数还是奇数。你有两个方面,这导致四种可能性:

  1. 宽度和高度都很奇怪。这个是最简单的:中心区块是width*(height/2)+width/2+1(希望它明白为什么)。
  2. 只有宽度是奇数,中心的瓷砖在行height/2-1的中间是一个,而在行height/2的中间是一个(从这一点开始计算起来并不太难)。
  3. 只有高度为奇数,中心切片为width/2-1,行width/2height/2
  4. 宽度和高度都是均匀的,在width/2-1行和width/2行中会有四个中心切片:height/2-1height/2
  5. 考虑到这一点,我相信您可以轻松创建if-branches(每种情况一个),并为每个案例编写一个瓷砖作为中心区域的支票。

    此外,在当前代码中,您有width = width等,这些行没有做任何有用的事情,所以您应该删除它们。并且您的方法名称看起来应该返回中央磁贴的数量,或者其他东西。最好将它重命名为is_tile_central(注意蛇案,这不是一个真正的错误,但这是我们用Python命名的方式)

    请修改缩进。我猜你在实际代码中已经正确了,但由于缩进在Python中是必不可少的,所以即使在问题中你也应该保持顺序。