我正在尝试创建一个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是网格的最大尺寸,因此这是我要打印的最大网格。
答案 0 :(得分: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()