问题标签 [python-chess]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1663 浏览

python - 如何在 python-chess 库中检测谁在移动白色或黑色?

我创建了一些国际象棋程序,想检测谁走白棋或走黑棋。哪些对象存储了哪些棋子将移动BoardGameNode 的信息

我分析了代码,但没有找到好的解释。

0 投票
1 回答
43 浏览

python - 尽管在 cmd 提示符下调用它,但无法从文件中调用属性

使用这个包 - https://pypi.python.org/pypi/python-chess

在 cmd 我可以执行以下操作

然后我创建了一个名为 a.py 的文件,它有以下 3 行:

我得到:

回溯(最后一次调用):文件“a.py”,第 3 行,在 board = chess.Board() AttributeError: module 'chess' has no attribute 'Board'

这突然出现(昨天,从来没有这个问题),现在在我尝试干净安装 python 3.5 的两台机器上都是一个问题。我该如何解决?

0 投票
1 回答
473 浏览

python - 使用 python-chess 为游戏添加动作

我一直在玩 python-chess,我正在加载一个 PGN 文件 (A),从中读取游戏。然后我采取行动,创建第二个更新的 PGN 文件 (B)。我阅读了 B 的最后一步,并想在 A 中进行相同的移动,并用日期对该移动进行评论。

最终的 PGN 文件显示了最初的游戏,没有从 B 移动。文档说它board()只是生成一个副本,并没有改变实际的游戏。在游戏中添加移动的正确方法是什么?

0 投票
2 回答
2577 浏览

python - python-chess - AttributeError:模块'chess'没有属性'pgn'

我正在尝试将 python 国际象棋游戏导出到 pgn 文件。文档建议-

但是该chess.pgn.Game.from_board(chessBoard)行会引发以下错误-

AttributeError:模块“国际象棋”没有属性“pgn”

pgn当我键入时,它也会显示在智能感知中,chess.因此编辑器也能够看到有一个pgnin chess。这是在 Windows 10 上的 VS2015 中运行的 python 3.x。

可能是什么原因造成的?

0 投票
1 回答
1655 浏览

python - Heroku -> Python:使用子进程启动可执行文件得到 [Permission Denied]

问题:

我在 heroku 上运行了一个 python webapp,它创建了一个与Stockfish国际象棋引擎通信的子进程。

我的本地计算机上的所有JustWorks™,但是在尝试在 Heroku 上部署项目时,我收到一条错误消息PermissionError: [Errno 13] Permission denied

下面,我包含了我尝试部署它时的 heroku 日志。

我知道其他人有 heroku 应用程序在同一个测功机中运行 stockfish 引擎,但是我没有太多运气找到资源来帮助我让它工作。任何帮助表示赞赏。谢谢!


日志:

bash 2017-06-20T22:32:48.419694+00:00 heroku[web.1]: Starting process with command `python server.py` 2017-06-20T22:32:51.933668+00:00 app[web.1]: Traceback (most recent call last): 2017-06-20T22:32:51.933687+00:00 app[web.1]: File "server.py", line 23, in <module> 2017-06-20T22:32:51.933882+00:00 app[web.1]: engine = chess.uci.popen_engine(DIR_PATH + "/stockfish_8_x64") 2017-06-20T22:32:51.933884+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/chess/uci.py", line 1405, in popen_engine 2017-06-20T22:32:51.934623+00:00 app[web.1]: PopenProcess(engine, command, **kwargs) 2017-06-20T22:32:51.934625+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/site-packages/chess/uci.py", line 404, in __init__ 2017-06-20T22:32:51.934874+00:00 app[web.1]: self.process = subprocess.Popen(command, **popen_args) 2017-06-20T22:32:51.934877+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/subprocess.py", line 707, in __init__ 2017-06-20T22:32:51.935286+00:00 app[web.1]: restore_signals, start_new_session) 2017-06-20T22:32:51.935288+00:00 app[web.1]: File "/app/.heroku/python/lib/python3.6/subprocess.py", line 1326, in _execute_child 2017-06-20T22:32:51.935988+00:00 app[web.1]: raise child_exception_type(errno_num, err_msg) 2017-06-20T22:32:51.936008+00:00 app[web.1]: PermissionError: [Errno 13] Permission denied 2017-06-20T22:32:52.051035+00:00 heroku[web.1]: State changed from starting to crashed 2017-06-20T22:32:52.035235+00:00 heroku[web.1]: Process exited with status 1

0 投票
1 回答
81 浏览

python - python-chess - 函数运行时全局变量发生变化

我对 Python 作用域在这里的工作方式感到困惑。

上面的代码产生这个输出:

全局变量保持不变,但在函数中,局部变量打印出正确的变化值。

但是,在这个 python-chess 版本中,我在下面运行:

它产生这个输出:

出乎意料(至少对我而言)board函数运行后全局变量发生了变化。

我认为一个函数会创建一个局部变量而不是修改全局变量 - 似乎您甚至需要明确暗示您想通过使用global关键字来更改它。它似乎在我使用的简单乘法示例中有效,也许是由于.push()python-chess 提供的方法?

然后在运行函数时如何保留全局变量的值?

在这种情况下,我想要的输出应该是:

0 投票
2 回答
402 浏览

python - 使用 Python 3 为 GNU Chess 编写 API/包装器

我目前正在为 GNU Chess 开发 Python 3 API/包装器。我一直在做一些研究,现在我几乎被困住了。

Chess Engine Communication Protocol,但我不确定这是否是我应该走的路。还有Internet Chess Servers,但我再次不确定这是否是我应该研究的。还有便携式游戏符号,但看起来它是为人类消费而不是计算机制作的。

那么与 GNU Chess 交互的最佳方式是什么?我应该创建一个子进程来与之交互/解析它的输出吗?这是最好的方法吗?

这是我在 GNU Chess 中进行开局的一个例子: 3]

0 投票
0 回答
55 浏览

python - 切片和列出副本

我正处于国际象棋实施的早期阶段,我正在研究如何移动棋子。问题是,我无法弄清楚列表切片发生了什么!

这是我的变量board

看起来像:

因此,我开始通过执行以下操作来遍历棋子以找到棋子可接受的移动:

哪里p_moves是:

最终发生的事情是new每次调用函数时板似乎都没有清除,我不明白为什么,因为我将它作为一个新变量切片,并且它在内存中的 ID 与 board_state 不同,所以我我不太确定这里发生了什么。

为了澄清,在循环通过顶部之后(我什至没有考虑下半部分 - 最小的一块怎么这么痛苦?!),下一个可能的董事会状态最终看起来像:

谢谢你的帮助。

0 投票
3 回答
2087 浏览

python-3.x - 从 SVG 棋盘中获取点击的棋子

我正在Python 3.6.3使用PyQt5 5.9.1(GUI 框架)和python-chess 0.21.1(国际象棋库)在Windows 10. 我想获取在 SVG 棋盘(由 提供python-chess)上单击的棋子的值,以便我可以将该棋子移动到另一个方格。

在第一次鼠标左键单击并获取该块后,我想从用户那里获得第二次鼠标左键单击并获取用户单击的方块。然后我的国际象棋 GUI 必须将棋子从起始方格移动到目标方格。

所以,这是我到目前为止的完整工作代码。非常欢迎任何提示或实际代码添加。

0 投票
2 回答
509 浏览

python - 为什么只在公共函数中调用私有函数?

当我看到以下代码时,我在神话般的python-chess库的源代码中徘徊:

reset_board()函数只做一件事,调用它的私有对应物。这背后有什么原因吗?由于python不必解析名称,将代码直接放在私有函数中会更快_reset_board()吗?