Можно настроить способ печати массивов Numpy с помощью set_printoptions
или set_string_function
.Вот краткая демонстрация set_printoptions
, которая печатает 0 черным, 1 красным и 2 зеленым.К сожалению, я не могу показать цветной вывод здесь.
import numpy as np
fmt = {'int': lambda i: '\x1b[{}m{}\x1b[0m'.format(30 + i % 8, i)}
gb = np.array([i%3 for i in range(49)], dtype=np.uint8).reshape(7, 7)
print(gb)
np.set_printoptions(formatter=fmt, linewidth=80)
print(gb)
вывод
[[0 1 2 0 1 2 0]
[1 2 0 1 2 0 1]
[2 0 1 2 0 1 2]
[0 1 2 0 1 2 0]
[1 2 0 1 2 0 1]
[2 0 1 2 0 1 2]
[0 1 2 0 1 2 0]]
[[0 1 2 0 1 2 0]
[1 2 0 1 2 0 1]
[2 0 1 2 0 1 2]
[0 1 2 0 1 2 0]
[1 2 0 1 2 0 1]
[2 0 1 2 0 1 2]
[0 1 2 0 1 2 0]]
Обратите внимание, что я использую 8-разрядные целые числа без знака.Это более эффективно, чем хранение строк в массивах Numpy.
Лучшим подходом является создание функции, которая печатает плату так, как мы хотим.В этом коде я использую 1 и 2 для двух фигур игрока, пустая ячейка доски содержит 0. Функция отображения show
печатает 0 как -
, а фигуры игрока как *
, с красным для игрока 1и желтый для игрока 2.
import numpy as np
# Reset color & style to default
off = '\x1b[0m'
# Set color to red
red = '\x1b[31m'
# Set color to yellow
yel = '\x1b[33m'
# Character for a game piece
piece = '*'
cells = ['-', red + piece + off, yel + piece + off]
BOARD_SIZE = 7
def make_board():
return np.zeros((BOARD_SIZE, BOARD_SIZE), dtype=np.uint8)
def show(board):
print(*range(1, BOARD_SIZE + 1))
for row in board:
print(' '.join([cells[u] for u in row]))
def drop(board, player, column):
""" Drop a piece for the player into the specified column """
for i in range(BOARD_SIZE):
if board[i, column]:
break
else:
# Column empty
i += 1
if i == 0:
# Column full
return False
board[i - 1, column] = player
return True
gb = make_board()
# Drop some pieces into the board
# 5 red pieces in column 0
for i in range(5):
drop(gb, 1, 0)
# 6 yellow pieces in column 2
for i in range(6):
drop(gb, 2, 2)
# 7 pieces alternating between red & yellow in column 4
for i in range(BOARD_SIZE):
drop(gb, 1 + i%2, 4)
#print(gb)
show(gb)
output
1 2 3 4 5 6 7
- - - - * - -
- - * - * - -
* - * - * - -
* - * - * - -
* - * - * - -
* - * - * - -
* - * - * - -
Если вы запустите этот код в своем терминале, он должен отобразиться в цвете.