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

Chess程序合法走棋校验失效:所有走棋均被判定为非法

问题根源

你代码里的list(board.legal_moves)生成的是**chess.Move对象的列表**,而非走棋字符串(比如"e4"、"e2e4")。输入的move是字符串类型,字符串和Move对象属于完全不同的类型,所以move in legal_moves永远返回False,不管输入是否合法。

解决办法

有两种常用的修复方式:

方式一:预生成合法走棋的SAN字符串列表

把合法走棋都转换成SAN格式的字符串,直接和输入的字符串做匹配:

import chess
board = chess.Board()
print(board)
# 生成合法走棋的SAN字符串列表
legal_moves = [board.san(move) for move in board.legal_moves]
while True:
    move = input("type a legal move: ")
    if move in legal_moves:
        board.push_san(move)
        # 更新合法走棋列表
        legal_moves = [board.san(move) for move in board.legal_moves]
        print(board)
    else:
        print("Illegal move! Input a legal move")

方式二:直接解析输入并处理异常

尝试把输入的字符串解析成chess.Move对象,解析成功说明是合法走棋,失败则捕获异常提示错误:

import chess
board = chess.Board()
print(board)
while True:
    move = input("type a legal move: ")
    try:
        # 解析输入为合法走棋
        chess_move = board.parse_san(move)
        board.push(chess_move)
        print(board)
    except ValueError:
        print("Illegal move! Input a legal move")

这种方式不需要维护额外的合法走棋列表,更简洁,推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 15:17:05