如何在Python中正确打印位板

2024-10-01 00:17:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我想用位板编程一个象棋引擎。因为我不太熟悉位板,所以我想先弄清楚如何使用它们。我写了一个小函数来打印位板。这就是我偶然发现一个问题的地方。我的函数似乎正确地打印出了等级,但似乎没有正确地打印出文件。在

def print_bitboard(bitboard):
    board = str(bin(bitboard)).zfill(64)
    for i in range(8):
    print(board[8*i+0] + " " + board[8*i+1] + " " + board[8*i+2] + " " + 
          board[8*i+3] + " " + board[8*i+4] + " " + board[8*i+5] + " " + 
          board[8*i+6] + " " + board[8*i+7])


bitboard1 = 
int("0000000000000000000000000000000000000000000000001111111100000000", 2)  
# 2nd rank
bitboard2 = 
int("1000000010000000100000001000000010000000100000001000000010000000", 2)  
# file A

print_bitboard(bitboard1)
print("")
print_bitboard(bitboard2)

结果:

^{pr2}$

Tags: 文件函数引擎boardbindef编程地方
2条回答

bin函数始终返回以0b开头的二进制文本的有效Python表示。如果不需要,可以使用str.format方法:

board = '{:064b}'.format(bitboard)

您可以使用wrap将字符串拆分为子字符串列表,使用join合并创建的列表:

from textwrap import wrap

                                       # |                           |
def print_bitboard(board):             # v split for spaces          v split for newlines
    print('\n'.join([' '.join(wrap(line, 1)) for line in wrap(board, 8)]))

bitboard1 = '0000000000000000000000000000000000000000000000001111111100000000'
print_bitboard(bitboard1)

# 0 0 0 0 0 0 0 0
# 0 0 0 0 0 0 0 0
# 0 0 0 0 0 0 0 0
# 0 0 0 0 0 0 0 0
# 0 0 0 0 0 0 0 0
# 0 0 0 0 0 0 0 0
# 1 1 1 1 1 1 1 1
# 0 0 0 0 0 0 0 0

bitboard2 = '1000000010000000100000001000000010000000100000001000000010000000'
print_bitboard(bitboard2)

# 1 0 0 0 0 0 0 0
# 1 0 0 0 0 0 0 0
# 1 0 0 0 0 0 0 0
# 1 0 0 0 0 0 0 0
# 1 0 0 0 0 0 0 0
# 1 0 0 0 0 0 0 0
# 1 0 0 0 0 0 0 0
# 1 0 0 0 0 0 0 0

相关问题 更多 >