Python开发国际象棋记谱程序时如何识别0-0、0-0-0并替换为对应表述
解决方案
修改思路
- 原代码逐字符遍历的逻辑无法识别「0-0」「0-0-0」这类多字符组合的记谱,因此需要先完成全局多字符子串替换,再处理单字符映射
- 必须优先替换更长的
0-0-0(长易位),再替换0-0(短易位),避免长易位的前半段被错误匹配为短易位 - 用字典存储映射规则,替代堆叠的if判断,后续维护扩展更方便
修改后代码
def say(chess_line): # 优先处理多字符易位规则 chess_line = chess_line.replace("0-0-0", " Castles queenside ") chess_line = chess_line.replace("0-0", " Castles ") # 单字符映射表 char_mapping = { "x": " Takes ", "N": " Knight ", "B": " Bishop ", "R": " Rook ", "Q": " Queen ", "K": " King " } line_of_chess = "" for char in chess_line: line_of_chess += char_mapping.get(char, char) # 去除首尾多余空格 return line_of_chess.strip()
效果验证
输入:
say("0-0")→ 输出:Castles
输入:say("0-0-0")→ 输出:Castles queenside
输入:say("Qxf7+")→ 输出:Queen Takes f7+
内容的提问来源于stack exchange,提问作者AkivaFinkin
相关产品推荐
相关产品推荐

