我有一项服务,可以从数据库中获取游戏并向其添加动作。另外,它编辑当前的 pgn(动作字符串)。是否有任何函数可以获取给定的动作字符串并从中解析动作?
我正在尝试这个,但遇到了问题
board = chess.Board()
if game.moves!="":
for move in game.moves.split():
board.push(chess.Move.from_uci(move))
在尝试将第一步附加到新游戏后,我遇到了这个问题:
board.push(chess.Move.from_uci(move)) ^^^^^^^^^^^^^^^^^^^^^^^^^ raise InvalidMoveError(f"expected uci string to be of length 4 or 5: {uci!r}") chess.InvalidMoveError: expected uci string to be of length 4 or 5: '1.'
您的
game.moves
有步数,如 "1. e4"
,并且可能也没有 UCI 格式的步数(例如 "e2e4"
)。
要处理 PGN 表示法,请使用
chess.pgn
库及其 read_game
函数。
示例:
import chess
import chess.pgn
import io
moves = "1. e4 e5 2. Nf3 *"
pgn = io.StringIO(moves)
game = chess.pgn.read_game(pgn)
board = game.board()
for move in game.mainline_moves():
board.push(move)
print(move)
输出:
e2e4
e7e5
g1f3