在什么情况下我的功能不能按预期工作?

时间:2016-03-10 04:47:13

标签: python list

我在游戏Battleship上做了一个项目,其中一个功能让我很难过。功能描述如下:

  

第一个参数是方形潜在的舰队网格,第二个参数和   第三个参数是包含的单元格的行和列索引   在船的左上角,第四个参数是一个字符   代表船舶,第五个参数是船舶的大小。   如果船出现的尺寸正确,此函数将返回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)

  • 对于垂直船舶,将船舶启动的行中的所有ROWS附加到ship_size行到列表中。然后在该列表中,将每行索引列的char附加到另一个列表(3)

  • 然后我将列表(1)与列表(2)和列表(3)进行比较。该函数仅在以下情况下返回True:

  • list2或list3与list1匹配,并且该网格中的字符数与ship_size

  • 指定的字符数相同

我已经在很多场景中绞尽脑汁,他们都按预期工作了。我不知道我的功能如何几乎没有通过检查器,所以任何建议都将不胜感激。

我也觉得直觉上有一种更简单的方法可以做到这一点,而且我也试图想办法做到这一点,但无法做到。也许我对当前的方法太过困惑了。任何可能更简单的解决方案的指针都会很棒。

1 个答案:

答案 0 :(得分:0)

1)不允许小块吗?在这种情况下,您需要进行所有列修改,因为您有垂直切片。

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