我正在使用Python的战舰游戏项目。我坚持在网格上显示放置的船只。这是我的功能,它根据用户输入的坐标显示更新的板 - 这些坐标是字母,数字如A10。用户网格是10x10的盒子。空板印有“O”,垂直船应印有|字符,而水平印有 - 。这是我设置所有坐标后更新电路板的功能。
def print_updated_board(coords, direction):
board = []
for row in range(10):
board_row = []
updated = []
for c in range(ord('a'), ord('a') + BOARD_SIZE):
t = chr(c) + str(row)
board_row.append(t)
if direction == 'v':
for coord in coords:
for w in board_row:
if coord == w:
updated.append(VERTICAL_SHIP)
else:
updated.append(EMPTY)
board.append(updated)
print_board_heading()
row_num = 1
for row in board:
print(str(row_num).rjust(2) + " " + (" ".join(row)))
row_num += 1
根据船只的大小创建了坐标,因此大小为4的示例战舰,垂直放置在a1处,将具有坐标(a1,a2,a3,a4)。我只是想在这个例子中打印一个|在那些坐标上留下空坐标为O.
我的代码现已关闭 - 网格似乎错误地打印了50行(而不是10行)。
任何有关在何处采取此行动的指导表示赞赏。感谢
编辑****************已实现我是双循环并将代码更改为此。不完美的工作(它在一个地方关闭)但正在努力。
def print_updated_board(coords, direction):
board = []
for row in range(10):
board_row = []
updated = []
for c in range(ord('a'), ord('a') + BOARD_SIZE):
t = chr(c) + str(row)
board_row.append(t)
if direction == 'v':
for b in board_row:
if b in coords:
updated.append(VERTICAL_SHIP)
else:
updated.append(EMPTY)
board.append(updated)
print_board_heading()
row_num = 1
for row in board:
print(str(row_num).rjust(2) + " " + (" ".join(row)))
row_num += 1
答案 0 :(得分:0)
问题是这些嵌套循环:
for coord in coords:
for w in board_row:
updated.append(...)
这会导致电路板在列表中的每个坐标处变宽。
最好的解决方案是将所有这些代码抛出窗口,因为有一种更容易实现的方法:
def print_updated_board(coords, direction):
# create an empty board
board = [['O']*BOARD_SIZE for _ in range(BOARD_SIZE)]
# at each coordinate, draw a ship
for coord in coords:
# convert string like "a1" to x,y coordinates
y= ord(coord[0])-ord('a')
x= int(coord[1:])-1
# update the board at this position
board[x][y]= '|' if direction=='v' else '--'