You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python控制台中实现国际象棋emoji打印的对齐排版?

解决Python控制台国际象棋Emoji排版对齐问题

问题出在象棋Emoji是宽字符(Windows控制台里占2个普通ASCII字符宽度),而你用的*是半角窄字符(仅占1个宽度),两者宽度不一致导致排版错位。以下是两种简单有效的解决方法:


方法1:替换空方块符号为全角字符

直接把空方块的符号换成和Emoji宽度一致的全角字符,比如全角方框□或者全角空格 (中文输入法下的空格):

修改symbols列表:

symbols = ["□", "♙", "♗", "♘", "♖", "♕", "♔", "♟", "♝", "♞", "♜", "♛", "♚"]
# 或者用全角空格:
# symbols = [" ", "♙", "♗", "♘", "♖", "♕", "♔", "♟", "♝", "♞", "♜", "♛", "♚"]

这样每个棋子/空方块的宽度完全一致,控制台里就能完美对齐。


方法2:用格式化字符串强制固定宽度

不管符号本身是宽还是窄,通过格式化语法强制每个元素占用2个字符宽度,确保排版对齐:

修改compile_board函数:

def compile_board(board_grid):
    compiled_board = ""
    for rank in board_grid:
        for square in rank:
            # 用:2格式化,强制每个符号占2字符宽度
            compiled_board += f"{symbols[letters.index(square)]:2} "
        compiled_board += "\n"
    return compiled_board

这个方法兼容性更强,哪怕后续更换其他符号,只要保持格式化规则就能对齐。


修改后的完整代码示例(以方法2为例):

letters = ["::", "wP", "wB", "wN", "wR", "wQ", "wK", "bP", "bB", "bN", "bR", "bQ", "bK"]
symbols = ["*", "♙", "♗", "♘", "♖", "♕", "♔", "♟", "♝", "♞", "♜", "♛", "♚"]
board = [
    ["bR", "bN", "bB", "bQ", "bK", "bB", "bN", "bR"],
    ["bP", "bP", "bP", "bP", "bP", "bP", "bP", "bP"],
    ["::", "::", "::", "::", "::", "::", "::", "::"],
    ["::", "::", "::", "::", "::", "::", "::", "::"],
    ["::", "::", "::", "::", "::", "::", "::", "::"],
    ["::", "::", "::", "::", "::", "::", "::", "::"],
    ["wP", "wP", "wP", "wP", "wP", "wP", "wP", "wP"],
    ["wR", "wN", "wB", "wQ", "wK", "wB", "wN", "wR"]
]

def compile_board(board_grid):
    compiled_board = ""
    for rank in board_grid:
        for square in rank:
            compiled_board += f"{symbols[letters.index(square)]:2} "
        compiled_board += "\n"
    return compiled_board

print_board = compile_board(board)
print(print_board)

运行后就能看到所有棋子和空方块整齐对齐,方便后续显示象、后的移动路径。

内容的提问来源于stack exchange,提问作者bchyou

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:22:40