使用基于用户输入的不同值在Python中显示网格

时间:2017-03-05 16:15:28

标签: python

我正在使用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

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 '--'