2017-04-14 96 views
0

我試圖計算從某個位置滿足特定位置的鄰接單元格的數量,該矩陣滿足特定條件(包含字符串的列表) - 每個單元格有八個相鄰單元格 - 。到目前爲止我已經做到了這一點,但它似乎並沒有成功地工作(不通過斷言數4):矩陣中的相鄰單元格(字符串列表)

def calculate_adjacents(matrix,row,column): 

'''Calculates the number of cells adjacent to the cell in (row,column)''' 

     adjacents = 0 
    for i in range(row-1,row+2): 
     for j in range(column-1,column+2): 
      if i == len(matrix) or j == len(matrix[i]): 
       break 
      if matrix[i][j] == "#": 
       adjacents += 1 
    return adjacents 

此外,必須驗證這一點:

def test_calculate_adjacents(): 
    assert calculate_adjacents((['.']), 0, 0) == 0 
    assert calculate_adjacents((['..', '..']), 0, 0) == 0 
    assert calculate_adjacents((['..', '..']), 0, 1) == 0 
    assert calculate_adjacents((['##', '..']), 0, 0) == 2 
    assert calculate_adjacents((['##', '..']), 0, 1) == 2 
    assert calculate_adjacents((['#.', '.#']), 0, 0) == 4 
    assert calculate_adjacents((['##', '##']), 0, 0) == 8 
    assert calculate_adjacents((['.#.', '#.#', '.#.']), 1, 1) == 4 
    assert calculate_adjacents((['.#.', '..#', '.#.']), 1, 1) == 3 
+0

好像這是關係到康威生命遊戲。如果「環繞」意味着我認爲它的意思,那麼你需要在像'row - 1'等表達式中使用模塊化算術。除非你編碼它,否則它不會環繞。另外 - 爲什麼'row + 2'而不是'row + 1'?似乎不一致。 –

+0

歡迎來到StackOverflow。請閱讀並遵守幫助文檔中的發佈準則。 [最小,完整,可驗證的示例](http://stackoverflow.com/help/mcve)適用於此處。在發佈您的MCVE代碼並準確描述問題之前,我們無法爲您提供有效的幫助。 *如何*這不起作用?這些測試會返回什麼樣的價值,您覺得它有什麼問題? – Prune

+0

是的,它與康威的生命遊戲有關。我會嘗試使用模塊化算術表達式。它沒有通過四個斷言 – Facu

回答

0

你有一個小問題,在康威的「生活」遊戲中很常見:你也在計算中心廣場。設置計數-1,如果中央廣場活着:

if matrix[row][column] == "#": 
    adjacents = -1 
else: 
    adjacents = 0 

或者,對於一個班輪:

adjacents = -1 if matrix[row][column] == "#" else 0