使用 python-chess 库打印单个动作

2023-12-14

我想按顺序打印我从文本文件中读取的游戏(使用 python-chess 库)的移动(每次移动一个字符串)。

所以,假设我有一个 pgn 文件,其中包含一个具有以下动作的游戏......

1.f3 e5 2.g4 Qh4#

...我想迭代这些动作并一一打印它们(使用 for 循环或类似的),显示

f3

e5

g4

Qh4

我在这里找到了 python-chess 的文档:https://python-chess.readthedocs.io/en/latest/

从文档中我了解到

  1. 我需要创建一个访问者的实例,它可以使用accept方法以PGN顺序遍历游戏节点
  2. sanmethon 会给我导致当前节点的移动的字符串

但我发现这种文档很难阅读,如果有例子的话会有很大帮助。

我设法做的是从 pgn 文件中读取游戏并使用变化方法一次性打印所有动作(而不是一个接一个)。

import chess.pgn

pgn = open('I:\myfile.pgn')
my_game = chess.pgn.read_game(pgn)

print(my_game.variation(0))

迭代主线动作

的文档chess.pgn.read_game()有一个迭代移动的例子。要将移动转换回标准代数符号,需要上下文位置,因此我们另外在board.

import chess.pgn

pgn = open("test.pgn")
game = chess.pgn.read_game(pgn)

board = game.board()

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

Visitors

上面的例子将整个游戏解析成一个数据结构(game: chess.pgn.Game)。访问者允许跳过该中间表示,这对于使用自定义数据结构或作为优化很有用。但这在这里似乎有点过分了。

尽管如此,为了完整性:

import chess.pgn

class PrintMovesVisitor(chess.pgn.BaseVisitor):
    def visit_move(self, board, move):
        print(board.san(move))

    def result(self):
        return None

pgn = open("test.pgn")
result = chess.pgn.read_game(pgn, Visitor=PrintMovesVisitor)

注意这也遍历了侧面变化按 PGN 顺序。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 python-chess 库打印单个动作 的相关文章

随机推荐

  • Selenium - send_keys() 发送不完整的字符串

    我的问题 我有一个填充字段的方法 但问题是 selenium 没有将完整的字符串发送到该字段 所以我的断言在验证时失败 My code var webdriver require selenium webdriver var casual
  • ios接收udp广播包

    我几乎完全完成了 REST 服务的 iOS 客户端 我唯一缺少的是客户端能够在网络上侦听 UDP 广播 该广播接收主机显示名称和上传的基本 URL 网络上可能有多个服务器正在广播并等待上传 异步是首选 当设备发现服务器时 服务器将显示给用户
  • Android 中的相机预览质量很差

    我正在 Android 中制作一个相机应用程序 并使用以下函数来获取预览尺寸 private Size getOptimalPreviewSize List
  • 当 DNS 无法访问时 URLConnection.setConnectTimeout() 不起作用

    这是我的代码 URL u new URL http www google com URLConnection conn u openConnection conn setConnectTimeout 3000 conn connect 我的
  • 将第 i 个向量编号插入数据框列名称 - R

    这可能是一个快速修复 我试图将向量的第 i 个位置放入数据框列名称中 我正在尝试使用 Paste0 输入第 i 个数字 sma lt 2 20 gt sma 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
  • 使用 sed 在第 N 个匹配模式后插入一些文本

    我怎样才能这样做呢 我有多个例如我的文件中存在 foobar 模式 如何在例如之后添加第四个 some text 以下内容对您有用吗 sed a N ba s foobar 1 nsome text 4 inputfile 对于输入 cat
  • x:Shared = 默认为 false

    是否可以设置x Shared false默认情况下以某种方式 我有很多ResourceDictionary我在添加新项目时经常忘记设置它 这只能在运行时发现 额外问题 Why x Shared智能感知从未显示过 有没有办法来解决这个问题 不
  • JavaScript:条件(三元)与布尔 OR 对于非布尔值?

    在 JavaScript 中 我是否可以始终使用布尔 OR 而不是条件运算符来处理所有类型的变量 例如字符串 函数 例如z x y 代替z x x y 它们很相似 但又不完全相同 x x y最终评估x两次如果x被选中 如果出现以下情况 这可
  • 从动态视图中识别按钮

    我已经为动态布局编写了这段代码 我使用这个循环生成一对按钮 这是我生成它们的代码部分 for int i 1 i lt 2 i Button button1 new Button this button1 setTag age button
  • 如何在 Likert 图的每个条形上输出正确的百分比?

    我试图让我的代码在每个单独的条形顶部输出百分比 现在 下面显示的百分比是错误的 我的代码组合了标签 1 和 2 以及标签 3 和 4 然后在不正确的一侧输出这些数字 是否有一个功能可以正确标记这些条形 我包括我的代码 csv 文件中的数据以
  • UIImageJPEGRepresentation - 内存释放问题

    在iPhone应用程序上 我需要通过邮件发送最大尺寸为300Ko的jpg 我不知道mail app可以有的最大尺寸 但这是另一个问题 为此 我尝试降低质量 直到获得低于 300Ko 的图像 为了获得给我300Ko以下的jpg的质量 压缩级别
  • 为什么 Rust 想要一次多次借用一个可变变量?

    我正在尝试用 Rust 实现动态编程问题 以熟悉该语言 与许多动态规划问题一样 这使用记忆来减少运行时间 不幸的是 我的第一次解决方案产生了错误 我已将代码精简为以下内容 警告 现在有点荒谬 use std collections Hash
  • url 或路径中的点

    考虑路径 images 1 png 这里 表示当前目录 IE 路径中的单点指的是当前目录 类似地 指的是它的父目录 ie 路径中的两个点指向后面的一个目录 那么一条路径中可能有多少个反向引用 即允许 如果是 其含义是什么 还有 的含义 对于
  • 如何进行批量插入——Linq to Entities

    我找不到任何有关如何使用 Linq to Entities 进行批量 批量插入的示例 你们知道如何批量插入吗 有时您只需混合模型即可 也许使用SqlBulkCopy对于存储库的这一部分 因为它直接插入批量复制 API 实体框架用于其余部分
  • SubSonic 的独立读/写连接

    我们客户生产环境的安全策略要求我们使用单独的连接来执行数据库的写入和读取 我们决定使用 SubSonic 来生成 DAL 所以我有兴趣知道这是否可能 如果可能的话如何 您可以指定 SubSonic 在运行时使用的提供程序 因此 您可以在从数
  • 在Linux中分配物理内存缓冲区

    我有一个 SoC 上面有 DSP 和 ARM 内核 我想创建一个共享内存部分 我的用户空间软件和 DSP 软件都可以访问它 在 Linux 中分配这样的缓冲区的最佳方法是什么 这是一些背景知识 现在我拥有的是我使用的内核模块kmalloc
  • 无法使用 JDBC 连接到 sql 2008 express

    我能够使用主机 nash pc sqlexpress 的 SQL Server Management Studio 连接到本地计算机上的 MSSQL 2008 Express 但是当我连接 Microsoft JDBC 驱动程序时 它给出如
  • iframe 内的 getElementById

    问 我有一个 iframe 调用页面 X 页面 X 上有一个 div id test 这个测试div的值为 bubbles 在父页面上 我需要读取 div 的值并将其存储为 javascript var 结果 在父页面上有一个documen
  • 添加路径和从 Python 调用外部程序时出现问题

    我在 home myname mydir 中有一个名为 foo 的可执行文件 并尝试从Python调用它 但我在这里做了一些基本且错误的事情 你能帮助我吗 import os sys sys path append home myname
  • 使用 python-chess 库打印单个动作

    我想按顺序打印我从文本文件中读取的游戏 使用 python chess 库 的移动 每次移动一个字符串 所以 假设我有一个 pgn 文件 其中包含一个具有以下动作的游戏 1 f3 e5 2 g4 Qh4 我想迭代这些动作并一一打印它们 使用