如何从列表中打印带有编号行和列的网格
我正在尝试创建一个可以改变大小的网格,大小是 n_rows
行和 n_columns
列。这是我的代码,它接受一个列表的列表和两个整数作为维度:
def _print_board(game_state: list, n_rows: int, n_columns: int)-> None:
for i in range(n_rows):
if i+1 < 10:
print(i+1, '', end=' ')
else:
print(i+1, end=' ')
for j in range(n_columns):
if game_state[j][i] == NONE:
print('.', end=' ')
elif game_state[j][i] == WHITE:
print(WHITE, end=' ')
elif game_state[j][i] == BLACK:
print(BLACK, end=' ')
else:
print('\n',end='')
我得到的输出是:
1 . . . . . . . . . . . . . . . .
2 . . . . . . . . . . . . . . . .
3 . . . . . . . . . . . . . . . .
4 . . . . . . . . . . . . . . . .
5 . . . . . . . . . . . . . . . .
6 . . . . . . . . . . . . . . . .
7 . . . . . . . . . . . . . . . .
8 . . . . . . . B W . . . . . . .
9 . . . . . . . W B . . . . . . .
10 . . . . . . . . . . . . . . . .
11 . . . . . . . . . . . . . . . .
12 . . . . . . . . . . . . . . . .
13 . . . . . . . . . . . . . . . .
14 . . . . . . . . . . . . . . . .
15 . . . . . . . . . . . . . . . .
16 . . . . . . . . . . . . . . . .
所以我得到了编号的行,但我不知道怎么正确格式化编号的列,也就是说,每个点要和行列号对齐。我想要的效果是这样的,但每个点也要和列号对齐:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
1 . . . . . . . . . . . . . . . .
2 . . . . . . . . . . . . . . . .
3 . . . . . . . . . . . . . . . .
4 . . . . . . . . . . . . . . . .
5 . . . . . . . . . . . . . . . .
6 . . . . . . . . . . . . . . . .
7 . . . . . . . . . . . . . . . .
8 . . . . . . . B W . . . . . . .
9 . . . . . . . W B . . . . . . .
10 . . . . . . . . . . . . . . . .
11 . . . . . . . . . . . . . . . .
12 . . . . . . . . . . . . . . . .
13 . . . . . . . . . . . . . . . .
14 . . . . . . . . . . . . . . . .
15 . . . . . . . . . . . . . . . .
16 . . . . . . . . . . . . . . . .
列号可以放在上面或下面,但我更喜欢放在上面。我该怎么做才能让点和列号对齐,并且不会有两个数字悬在边缘?网格的最大尺寸是16,所以这是我会打印的最大网格。
1 个回答
0
解决这个问题最简单的方法是把所有数字格式化成两位数:
def _print_board(game_state):
print(" ".join("{0:2d}".format(i) if i else " " # or 0:02d to pad with zero
for i in range(len(game_state[0]) + 1)))
for i, row in enumerate(game_state, 1):
print("{0:2d}".format(i), end=" ")
print("".join(" {0} ".format(col if col != NONE else ".") for col in row))
注意,如果你可以从game_state
中获取大小,就不需要传递这些大小。对于一个12x4的网格,这样做会给我:
1 2 3 4 5 6 7 8 9 10 11 12
1 . . . . . . . . . . . .
2 . . . . . . . . . . . .
3 . . . . . . . . . . . .
4 . . . . . . . . . . . .
稍微扩展一下上面的函数:
def _print_board(game_state):
# headers
for i in range(len(game_state[0]) + 1):
if i == 0:
# column for row numbers
print(" ", end="")
else:
# column headers
print("{0:2d} ".format(i), end="")
print()
for i, row in enumerate(game_state, 1):
# row number
print("{0:2d} ".format(i), end="")
for col in row:
# row data
if col == NONE:
print(" {0} ".format("."), end="")
else:
print(" {0} ".format(col), end="")
print()