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__方法,直接调用就能得到对应符号,不需要额外做类型判断,代码可维护性更高。
首先修正你现有代码的已知问题:
- Piece类的
get_side方法漏写self - 补全所有棋子类的符号实现
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
相关产品推荐
相关产品推荐

