首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我如何使用python来操作这个国际象棋符号呢?

我如何使用python来操作这个国际象棋符号呢?
EN

Stack Overflow用户
提问于 2021-10-31 13:26:49
回答 3查看 423关注 0票数 1

我试图在python中使用一些与国际象棋相关的库(例如,棋子和国际象棋),它们使用以下符号

r1bqkb1r/pppp1Qpp/2n2n2/4p3/2B1P3/8/PPPP1PPP/RNB1K1NR b KQkq -0 4

我已经搜过了,什么也没找到。我如何操作这一点,如何将标准代数表示法(例如"d4 Nc6 e4 e5 f4 f6 dxe5 fxe5")转换为这个新的代数符号?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2021-11-03 19:22:08

获取FEN信息:符号表示法

从python中的san获得FEN有两种方法:使用.pgn文件:

代码语言:javascript
复制
import chess
import chess.pgn

pgn = open("your_pgn_file.pgn")
game = chess.pgn.read_game(pgn)
board = game.board()

for move in game.mainline_moves():
    board.push(move)
print(board.fen())

或者从一个单一的san主线:

代码语言:javascript
复制
import chess

board = chess.Board()
san_mainline = "d4 Nc6 e4 e5 f4 f6 dxe5 fxe5"

for move in san_mainline.split():
    board.push_san(move)
print(board.fen())
票数 0
EN

Stack Overflow用户

发布于 2021-10-31 13:29:37

这种表示法被称为FEN (Forsyth-Edwards表示法),它看起来就像python知道并能够解析它。

这个表示法实际上并不等同于一个移动列表--这是用于指定一个位置,这也可能是一个起始位置。没有关于这场比赛是如何达到那个程度的完整记录。

Python-国际象棋可以将你加载到它的任何棋盘位置--例如使用PGN符号--变成这个符号。

票数 2
EN

Stack Overflow用户

发布于 2021-10-31 13:41:54

您可以使用python-chess来完成这项工作。下面是使用SAN字符串并在板上进行这些操作的代码:

代码语言:javascript
复制
import chess
san = 'd4 Nc6 e4 e5 f4 f6 dxe5 fxe5'
board = chess.Board()
for move_san in san.split(' '):
    board.push_san(move_san)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69787349

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档