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

Python如何识别象棋对象类型并转换为Unicode符号打印棋盘

判断对象所属类的方法

使用Python内置的isinstance()函数即可判断对象是否为指定类的实例,用法如下:

# 直接判断对象类型返回对应符号
def get_piece_symbol(piece):
    if isinstance(piece, Rook):
        return "♖" if piece.side_ else "♜"
    elif isinstance(piece, King):
        return "♔" if piece.side_ else "♚"
    elif isinstance(piece, Bishop):
        return "♗" if piece.side_ else "♝"
    # 其他棋子类型以此类推

更推荐的实现方案(无需判断类型)

利用面向对象的多态特性,给所有棋子子类都实现各自的__repr__方法,直接调用就能得到对应符号,不需要额外做类型判断,代码可维护性更高。
首先修正你现有代码的已知问题:

  1. Piece类的get_side方法漏写self
  2. 补全所有棋子类的符号实现
class Piece:
    pos_x : int 
    pos_y : int
    side_ : bool # True代表白方,False代表黑方
    def __init__(self, pos_X : int, pos_Y : int, side_ : bool):
        self.pos_x=pos_X 
        self.pos_y=pos_Y
        self.side_=side_

    def __str__(self):
        return repr(self)

    def get_side(self):
        return self.side_ # 修正漏写self的问题
      
class Rook(Piece):
    def __repr__(self):
        return "♖" if self.side_ else "♜"  

class King(Piece):
    def __repr__(self):
        return "♔" if self.side_ else "♚"  

class Bishop(Piece):
    def __repr__(self):
        return "♗" if self.side_ else "♝"  

# 示例棋子初始化
wr1 = Rook(1,2,True)
br1 = Rook(4,3,False)
br2 = Rook(2,4,False)
br3 = Rook(5,4, False)
wr2 = Rook(1,5, True)
wk = King(3,2, True)
bk = King(3,4, False)
wb1 = Bishop(5,5, True)
wb2 = Bishop(1,1, True)
B1 = (10, [wr1,br1, br2, br3, wr2, wk, bk, wb1, wb2])

最后补全conf2unicode函数,先初始化空白棋盘再填充棋子:

def conf2unicode(B) -> str: 
    board_size = B[0]
    # 初始化空白棋盘,默认填充全角空格
    board = [[" " for _ in range(board_size)] for _ in range(board_size)]
    # 填充棋子位置
    for piece in B[1]:
        # 可根据你自己的坐标定义调整索引换算规则
        board[piece.pos_y - 1][piece.pos_x - 1] = repr(piece)
    # 拼接为完整字符串返回
    return "\n".join("".join(row) for row in board)

# 测试输出
print(conf2unicode(B1))

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 12:15:04