我正在阅读有关如何用 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 脚本,它使用 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-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.
可能是什么原因造成的?
我正在开发基于此库的国际象棋游戏: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 国际象棋模块。在网站上,它显示您可以通过使用检查移动是否合法
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)
如何像使用列表一样选择移动?那么,我将如何使用选择作为移动?
我正在尝试创建一个引擎,但我的评估功能很糟糕,所以我决定使用 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-chess库的源代码中徘徊:
def _reset_board(self):
# code...
def reset_board(self):
self._reset_board()
Run Code Online (Sandbox Code Playgroud)
该reset_board()函数只做一件事,调用它的私有对应物.这背后有原因吗?不会将代码直接放在私有函数中更快,因为python不必解析名称_reset_board()?