2016-11-28 31 views
0

我被困在關於從棋盤上獲得核心棋子的問題上。 例如,如果棋盤是3x3,那麼如果拼圖數量爲「5」,則只返回「中心」。如果董事會是一個2×2,那麼我會返回每個瓦片的「中心」。由於我很難編碼這個問題,所以我遇到了問題。到目前爲止,我有:從板上找到中心棋子

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 

我真的失去了對如何開始這個編碼使用上述函數來創建一個通用的解決方案,使我沒有硬編碼。將不勝感激!

回答

2

我不會爲你創建一個解決方案,但儘量幫助你創造它。

爲了找到一個通用的解決方案,你需要概括問題的說明(不喜歡板可以是2×2或3×3,但在一些籠統)。所以。你有兩個選擇:董事會的一方是偶數或者是奇數。並且您有兩面,這導致四種可能性:

  1. 寬度和高度都是奇數。這一個是最簡單的:中心瓷磚是width*(height/2)+width/2+1(希望這很明顯,爲什麼)。
  2. 只有寬度爲奇數時,中心圖像塊將一個在height/2-1一行和一在height/2排中間的中間(不太難以從在這一點上計算)。
  3. 只有高度爲奇數,中心磚是在height/2width/2-1width/2
  4. 寬度和高度均勻,將會有四個中心貼片:width/2-1width/2,第height/2-1height/2行。

有考慮到這一點,我相信你可以輕鬆地創建,如果分支(每個案件),並寫出對每個案件瓷磚是中心貼片檢查。

此外,在目前的代碼中,你有width = width等,這些行不做任何有用的,所以你應該刪除它們。而你的方法名稱看起來像方法應該返回中央瓷磚的數量,或者什麼。最好重新命名爲is_tile_central(注意蛇的情況,這不是一個真正的錯誤,但它是我們用Python命名的東西)

請修復縮進。我想你在實際的代碼中是正確的,但是因爲縮進在Python中是必不可少的,所以即使在提問時也應該保持它們的順序。