我正在尝试创建一个神经网络来下棋,但首先,我需要将棋盘转换为整数列表。我正在使用国际象棋棋盘和游戏的python国际象棋模块。我目前有一个国际象棋棋盘类,但找不到将其转换为列表的方法。
我试过使用棋盘。epd()
方法,但它返回的格式方案很难转换。
下面是我需要的代码:
board = chess.Board() # Define board object
board.convert_to_int() # Method I need
现在,使用。epd()
我得到的方法“rnbqkbnr/PPPPPP/8/8/5P2/PPPPP 1PP/rnbqkbnr b KQkq-”
如您所见,解析并转换为整数列表非常困难,因为有/8/
和/5P2/
。
预期的输出是这样的(逐行):
[4, 2, 3, 5, 6, 3, 2, 4, 1, 1, 1, 1, 1, 1, 1, 1, ... -1, -1, -1, -1,-1, -1,-1, -1, -4, -2, -3, -5, -6, -3, -2, -4]
例如,这些可以是映射到PEICE的整数:
pawn - 1
knight - 2
bishop - 3
rook - 4
queen - 5
king - 6
白色可以是正整数,黑色可以是负整数。
我做了一个函数来转换国际象棋。将对象转换为矩阵
def make_matrix(board): #type(board) == chess.Board()
pgn = board.epd()
foo = [] #Final board
pieces = pgn.split(" ", 1)[0]
rows = pieces.split("/")
for row in rows:
foo2 = [] #This is the row I make
for thing in row:
if thing.isdigit():
for i in range(0, int(thing)):
foo2.append('.')
else:
foo2.append(thing)
foo.append(foo2)
return foo
这将返回一个矩阵或嵌套列表:
输出:
[['r', 'n', 'b', 'q', 'k', 'b', 'n', 'r'],
['p', 'p', 'p', 'p', 'p', 'p', 'p', 'p'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['.', '.', '.', '.', '.', '.', '.', '.'],
['P', 'P', 'P', 'P', 'P', 'P', 'P', 'P'],
['R', 'N', 'B', 'Q', 'K', 'B', 'N', 'R']]
我刚刚阅读了chess
模块的文档,并根据您的需要创建了一个简单的抽象类。
import chess
class MyChess(chess.Board):
mapped = {
'P': 1, # White Pawn
'p': -1, # Black Pawn
'N': 2, # White Knight
'n': -2, # Black Knight
'B': 3, # White Bishop
'b': -3, # Black Bishop
'R': 4, # White Rook
'r': -4, # Black Rook
'Q': 5, # White Queen
'q': -5, # Black Queen
'K': 6, # White King
'k': -6 # Black King
}
def convert_to_int(self):
epd_string = self.epd()
list_int = []
for i in epd_string:
if i == " ":
return list_int
elif i != "/":
if i in self.mapped:
list_int.append(self.mapped[i])
else:
for counter in range(0, int(i)):
list_int.append(0)
注:
大写字母代表白色,小写字母代表黑色。0表示棋盘上的空格。
下面是使用Unicode()方法的另一个版本:
def convert_to_int(board):
indices = '♚♛♜♝♞♟⭘♙♘♗♖♕♔'
unicode = board.unicode()
return [
[indices.index(c)-6 for c in row.split()]
for row in unicode.split('\n')
]
我目前正在将我的“旧”基于Python的聊天机器人改写成golang。我遇到的一个问题是我不能将PDF转换成jpeg。我想这样做,这样我就可以轻松地将它发送到聊天室。 已经用bimg(根本不起作用)和imagemagick(gopkg.in/gographics/imagick.v3/imagick)尝试过这一点,正如在对另一个线程的回答中提供的那样:https://stackoverflow.c
问题内容: 是否有内置的方法将布尔值转换为整数,反之亦然?我尝试了普通的转换,但是由于它们使用不同的基础类型,因此经典的转换方式是不可能的。我已经填写了一些规范,但尚未找到答案。 问题答案: 从int到bool很容易,只需完成操作即可。换句话说,由于Go不支持三元运算符,因此您必须执行以下操作: 您当然可以将其放在函数中: 整数有很多种可能的布尔解释,但它们都不一定是自然的,因此必须说出您的意思是
所以我想知道怎么才能把一个芬的ID转换到棋盘上。 代码: 我很感激我得到的任何帮助。如果你需要更多的信息,请告诉我。
问题内容: 我的软件在UTF8中得到的字符串比我转换为ISO 8859 1所需的字符串多。我知道UTF8域比iso 8859大。但是UTF8中的数据先前已从ISO上转换,所以我不应该错过任何内容。 我想知道是否存在从UTF8转换为iso-8859-1的简单/直接方法。 谢谢 问题答案: 这是您可能会发现有用的功能:。它可以转换为(包括欧元,但没有),但是对于-> -> 往返的-> 转换部分,它也可
问题内容: 因此,我有一个方法,其中包含3种不同类型的参数: ,和。因此,想法是使用泛型来最小化接口 但是我已经意识到,是在运行时,and 参数实际上会使那失败。这是有道理的,这只是我的一厢情愿。 但是,如果我尝试将a强制转换为双精度,编译器将吠叫: 无法使用参数’(T)’调用类型’Double’的初始化程序 我认为这也是有道理的,因为没有Double的初始化程序需要Generic。 因此,看起来
问题内容: 我需要转换成,成等。 有没有办法用库或类或其他东西做到这一点? 问题答案: 此代码的大部分是设置数字单词dict,仅在第一次调用时才完成。