标签: python-chess

如何在 Python 中显示 SVG 图像

我正在阅读有关如何用 Python 编写国际象棋程序的教程。

它使用python-chess引擎。该引擎的函数显然会返回 SVG 数据,可用于显示棋盘。

  • 教程中的代码:
import chess
import chess.svg

from IPython.display import SVG

board = chess.Board()
SVG(chess.svg.board(board=board,size=400))  
Run Code Online (Sandbox Code Playgroud)

但是当我运行该代码时,我看到的只是终端中的一行,没有图像。

<IPython.core.display.SVG object>

本教程简要介绍了 Jupyter Notebooks 以及如何使用它们来显示 SVG 图像。我没有使用 Jupyter Notebooks 的经验,尽管我从 pip 安装了这个包并且稍微了解了如何使用它,但我在解决原来的棋盘问题上并没有取得太大进展。但我确实拥有使用 C++ 进行 Qt 开发的经验,并且由于 Qt 具有 Python 绑定,因此我决定使用这些绑定。

这是我写的:

import sys
import chess
import chess.svg
from PyQt5 import QtGui, QtSvg
from PyQt5.QtWidgets import QApplication
from IPython.display import SVG, display

app = QApplication(sys.argv);

board = chess.Board(); 
svgWidget = QtSvg.QSvgWidget(chess.svg.board(board=board, size=400));
#svgWidget.setGeometry(50,50,759,668)
svgWidget.show()

sys.exit(app.exec_()) …
Run Code Online (Sandbox Code Playgroud)

python svg pyqt pyqt5 python-chess

12
推荐指数
1
解决办法
2万
查看次数

Python-chess 打开 UCI 引擎权限错误被拒绝

我目前正在创建一个 python 脚本,它使用 python-chess 和 chess.uci 打开国际象棋引擎 Stockfish。但是,当我尝试打开 Stockfish 引擎时,我得到了

PermissionError: [Errno 13] 权限被拒绝

所以我更深入地研究了这个问题,显然,你不能直接打开目录或文件夹。但是,查看有关为 python-chess 打开 UCI 引擎的文档,该示例显示打开似乎是 /usr/bin 下的目录

文档在这里:https : //python-chess.readthedocs.io/en/v0.23.10/uci.html

有没有其他方法可以使用 UCI 打开引擎?我的操作系统是 Mac OS。

python uci python-chess

5
推荐指数
1
解决办法
218
查看次数

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

我正在尝试将python-chess游戏导出到pgn文件.该文件建议-

import chess
.
.
chessBoard = chess.Board()
.
.    
#Play the game and when over do below
game = chess.pgn.Game.from_board(chessBoard)
with open('output.pgn', 'a') as the_file:
    print(game, file=the_file, end="\n\n")
Run Code Online (Sandbox Code Playgroud)

但该chess.pgn.Game.from_board(chessBoard)行抛出以下错误 -

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

pgn当我输入时,也会出现在intellisense中,chess.因此编辑器也可以看到有一个pgnin chess.这是在Windows 10上的VS2015中运行的python 3.x.

可能是什么原因造成的?

python python-chess

3
推荐指数
1
解决办法
635
查看次数

从库 python-chess on line 命令可视化完整的棋盘

我正在开发基于此库的国际象棋游戏:https : //pypi.org/project/python-chess/https://github.com/niklasf/python-chess

在 Jupyter Notebook 上,如果我运行此代码:

import chess
board = chess.Board()
board
Run Code Online (Sandbox Code Playgroud)

它将显示一个漂亮的棋盘(即具有颜色、形状、看起来像棋盘)。如果我像这样运行:

import chess
board = chess.Board()
print(board)
Run Code Online (Sandbox Code Playgroud)

它将以更基本的方式用字母显示板。

问题是,使用“board”命令查看漂亮板子的唯一方法是,如果我使用的是 Jupyter Notebook。如果我尝试在 Visual Studio 或 line 命令上运行命令“board”,则不会发生任何事情。似乎 line 命令不支持使用“board”(来自他们的网站:Supports Python 3.6+ and PyPy3.IPython/Jupyter Notebook integration)。

有没有解决的办法?换句话说,我仍然可以在命令行上运行“board”并可视化漂亮的国际象棋棋盘吗?

python jupyter-notebook python-chess

3
推荐指数
1
解决办法
3598
查看次数

如何获取python-chess模块​​中所有合法动作的列表?

我正在使用 python 国际象棋模块。在网站上,它显示您可以通过使用检查移动是否合法

import chess

board = chess.Board()
move = input("Enter a chess move: ")
if move in board.legal_moves:
    # Some code to do if the move is a legal move
Run Code Online (Sandbox Code Playgroud)

但是,我希望能够从board.legal_moves. 当我尝试这个时:

print(board.legal_moves[0])
Run Code Online (Sandbox Code Playgroud)

这将返回以下错误:

TypeError: 'LegalMoveGenerator' object is not subscriptable
Run Code Online (Sandbox Code Playgroud)

如何像使用列表一样选择移动?那么,我将如何使用选择作为移动?

python list python-3.x python-chess

3
推荐指数
2
解决办法
1908
查看次数

Python:使用 python-chess 库中的 stockfish 评估棋盘位置

我正在尝试创建一个引擎,但我的评估功能很糟糕,所以我决定使用 stockfish 来为我评估它。

import chess
import chess.engine

def stockfish_evaluation(board, time_limit = 0.01):
    engine = chess.engine.SimpleEngine.popen_uci("stockfish/stockfish_10_x64")
    result = engine.play(board, chess.engine.Limit(time=time_limit))
    return result.info["score"]

board = chess.Board("rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1")
result = stockfish_evaluation(board)
print(result)
Run Code Online (Sandbox Code Playgroud)

但它打印出来:

KeyError: 'score'
Run Code Online (Sandbox Code Playgroud)

python python-chess

2
推荐指数
1
解决办法
3562
查看次数

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

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

def _reset_board(self):
    # code...

def reset_board(self):
    self._reset_board()
Run Code Online (Sandbox Code Playgroud)

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

python function private-methods python-chess

1
推荐指数
1
解决办法
187
查看次数