У меня есть словарь под названием «Флот нескольких кораблей».Каждый корабль в словаре длиннее 1 (состоит как минимум из двух наборов координат, например [[3, 1], [3, 2]]
и [[2, 3], [2, 4], [2, 5]]
.
. С помощью приведенного ниже кода мне удается получить координаты всех кораблей,но почему-то я не могу понять, как составить список флотов, где каждый элемент внутри представляет собой список списков с координатами. Для приведенного выше примера мне нужен такой результат:
[[[3, 1], [3, 2]],
[[2, 3], [2, 4], [2, 5]]]
Я представляю другой *Требуется цикл 1008 *, но мне не удается правильно его интегрировать.
Проблемный код находится в функции place_ship ()
num_cols = 5 # board size direction x
num_rows = 4 # board size direction y
empty_field = "~"
fleet = {
"Submarine": [3, "S"],
"Patrol Boat": [2, "P"]
}
def place_ship():
# place ship based on orientation
list_ship_coordinates = []
if ori == "v":
for i in range(fleet[ship][0]):
board[x + i][y] = fleet[ship][1]
part_of_ship = [x + i + 1, y + 1]
list_ship_coordinates.append(part_of_ship)
print(list_ship_coordinates)
elif ori == "h":
for i in range(fleet[ship][0]):
board[x][y + i] = fleet[ship][1]
part_of_ship = [x + 1, y + i + 1]
list_ship_coordinates.append(part_of_ship)
print(list_ship_coordinates)
return board
def validate():
if ori == "v" and x + fleet[ship][0] > num_rows:
return False
elif ori == "h" and y + fleet[ship][0] > num_cols:
return False
else:
if ori == "v":
for i in range(fleet[ship][0]):
if board[x + i][y] != empty_field:
return False
elif ori == "h":
for i in range(fleet[ship][0]):
if board[x][y + i] != empty_field:
return False
return True
for ship in fleet:
valid = False
while not valid:
x = randint(0, num_rows - 1)
y = randint(0, num_cols - 1)
o = randint(0, 1)
if o == 0:
ori = "v"
else:
ori = "h"
valid = validate()
board = place_ship()