属性错误:"NoneType"对象没有属性"符号"python-chess



我正在做评级职位,但我不知道一件作品是否在某个正方形上。当我运行代码时,我得到

属性错误:"NoneType"对象没有属性"symbol"

这是代码:

for i in range(0,8):
for j in range(0,8):
if i == 0:
s='A'
if i == 1:
s='B'
if i == 2:
s='C'
if i == 3:
s='D'
if i == 4:
s='E'
if i == 5:
s='F'
if i == 6:
s='G'
if i == 7:
s='H'
if j == 0:
e='1'
if j == 1:
e='2'
if j == 2:
e='3'
if j == 3:
e='4'
if j == 4:
e='5'
if j == 5:
e='6'
if j == 6:
e='7'
if j == 7:
e='8'
piece = board.piece_at(getattr(chess,s+e))
print(piece.symbol())

如果没有棋子(如起始板中的e4(,board.piece_at()将返回None。因此,在询问其符号之前,您应该检查piece == None是否存在。

请注意,您的代码可以更高效,如下所示:

import chess
board = chess.Board()
for i in chess.SQUARES :
piece = board.piece_at(i)
if piece != None :
print(piece.symbol())

如果你想用python在国际象棋中排名,我可以帮你一点。我也做过。
你可以为每件作品制作一张好的位置表(请参阅本页(。您可以为每件商品创建商品位置列表,从a1、b1。。。并以h8结束。
例如,对于白色国王:

K = [0.269, 0.883, 1.907, 9.062, 3.559, 6.985, 2.233, 0.495,
0.435, 1.236, 3.644, 9.126, 11.745, 8.228, 2.583, 0.0737,
0.553, 1.564, 2.329, 3.557, 3.772, 3.142, 2.056, 0.774,
0.505, 0.877, 1.233, 1.369, 1.456, 1.432, 1.118, 0.592,
0.370, 0.672, 0.712, 0.686, 0.763, 0.748, 0.728, 0.399,
0.246, 0.418, 0.481, 0.440, 0.395, 0.440, 0.398, 0.288,
0.164, 0.263, 0.262, 0.200, 0.190, 0.215, 0.259, 0.167,
0.066, 0.106, 0.080, 0.086, 0.076, 0.082, 0.088, 0.056]

注意:对于黑色部分,为了进行良好的分析,值必须为负数

接下来,您可以创建一个dict,将每个字符串符号引用到其相应的商品位置列表:

pieces = {'K': K, 'k': k, 'Q': Q, 'q': q, 'R': R, 'r': r, 'N': N, 'n': n, 'B': B, 'b': b, 'P': P, 'p': p}

现在,你可以对位置进行评级估计(只是位置,而不是其他参数,但如果你联系我,我可以帮助你对国际象棋中的其他位置进行评级。我理解你的问题是"我想对棋盘上的每个棋子的位置进行评级"(:

def placement_eval(pos) :
'''evaluation of piece placement'''
evalu = 0
for case in list(chess.SQUARES) :
piece = pos.piece_at(case)
if piece != None :
evalu = evalu + pieces[piece.symbol()][case]
return evalu / 10 # /10  or /100, as you want

最新更新