如何在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
相关产品推荐
相关产品推荐

