我是班级的新手,但是他们努力将它们整合到所有采用相同输入的功能的程序中(我假设这样做是最有意义的) ...?)。我在棋盘上工作,所以看起来很合适。
我在下面有一个例子,我试图为一件作品提供有效的动作。
class Board:
def __init__(self, board, r, c):
self.board = board
self.r = r
self.c = c
def piece(self):
return self.board[self.r,self.c]
def color(self):
#does this line not get pushed down so 'legal_moves' can't see self.piece?
self.piece = Board(self.board,self.r,self.c).piece()
if self.piece == '-':
return 'N'
elif self.piece.istitle():
return 'w'
else:
return 'b'
#This is the function that returns None
def legal_moves(self):
moves = {'P':[(1,0)],
'p':[(-1,0)],
'r':[(1,0),(-1,0),(0,1),(0,-1)],
'n':[(2,1),(2,-1),(-2,-1),(-2,1)],
'b':[(1,1),(-1,-1),(-1,1),(1,-1)],
'k':[(1,0),(-1,0),(0,1),(0,-1),(1,1),(-1,-1),(-1,1),(1,-1)]}
return moves.get(self.piece)
我的主板只是一个标准的8x8国际象棋棋盘,R-K用于' w'和' b'和r-K在其初始配置(没有移动)
print(Board(curr,1,2).piece()) #returns P - correct
print(Board(curr,1,2).color()) #returns w - correct
print(Board(curr,1,2).legal_moves()) #returns None - incorrect
谢谢!另外,我是编程的新手,所以如果你有任何风格/效率的评论,请添加它们。
答案 0 :(得分:2)
您在get
上调用self.piece
这是您的方法,而不是方法的结果。此密钥不在您的字典中,您将获得默认值get
你需要:
moves.get(self.piece())
使用属性装饰器制作piece
属性可能更具可读性(并且您不需要()
)
@property
def piece(self):
return self.board[self.r,self.c]
表示moves.get(self.piece)
有效。