2016-03-10 58 views
0

我正在做一個關於遊戲戰艦的項目,其中一個功能讓我難堪。功能的說明是:在什麼情況下我的功能可能無法按預期工作?

第一個參數是一個方勢船隊網格,所述第二和 第三參數是含有 船的頂部/左上角的單元格的行和列索引,第四參數是代表一艘船的字符 ,第五個參數是船的尺寸。 如果船在正確的尺寸 完全連續或完全位於給定的起始 單元格的列中,則此函數返回True。

我的代碼:

def has_ship(fleet_grid, row, column, ship_char, ship_size):  
    row, column = row - 1, column - 1 

    ship_char_in_grid = check_specified_character(fleet_grid, ship_char)    
    ship_list = [] 

    for size in range(ship_size): 
     ship_list.append(ship_char) 

    horizontal_row = fleet_grid[row]           
    horizontal_ship = horizontal_row[column : column + ship_size]    

    vertical_column = fleet_grid[row: row + ship_size]   
    vertical_ship = []         

    for row_of_interest in vertical_column:       
     vertical_ship.append(row_of_interest[column])    

    return ship_char_in_grid == ship_size and ship_size \ 
      (vertical_ship == ship_list or horizontal_ship == ship_list) 

check_specified_character是看到指定的字符多少次出現在全網。

什麼我基本上做的是:

  • 追加船字符ship_size次列表(1)

  • 的水平船舶,隔離指定行,從開始追加字符(由列指定)後,將ship_size字符轉換爲另一個列表(2)

  • 對於垂直船舶,將所有船舶從船舶啓動行的ship_size行添加到列表中。然後在該列表中,將每行索引列中的字符追加到另一個列表中(3)

  • 然後我將列表(1)與列表(2)和列表(3)進行比較。該功能將只返回真,如果:

  • 列表2或項目list3匹配列表1並有由ship_size指定

我已經摺磨我這麼多的情況下大腦的相同數量的該網格的字符他們都按預期工作。我沒有看到我的函數幾乎沒有通過檢查器,所以任何建議將不勝感激。

我也直覺地感覺到,有一種更簡單的方法可以做到這一點,我也嘗試過想辦法做到這一點,但卻做不到。也許我現在的方法太困擾了。任何指向可能更簡單的解決方案的指針都會很棒。

回答

0

1)是不是允許的numpy?因爲你有垂直切片,所以你不需要在這種情況下調整列的大小。

2)你也可以遍歷網格作爲基質,即:

has_ship=True 
for i in range(ship_size): 
    if (grid[row+i][col] != ship_char) and (grid[row][col+i] != ship_char) : 
    has_ship=False 
    break 
相關問題