我刚刚开始学习Python课程,我有一个简单的问题。我很惊讶它的代码有多简洁,但是我试图弄清楚以下是否可以解决我正在进行的国际象棋问题。
(1) 我可以从类方法中以某种方式附加列表吗?我试图弄清楚是否有积累方法每次调用 capture 时列表中的各个部分。
(2) 如何在类中调用方法以在另一个方法中使用?我希望能够检查移动是否有效甚至在进行之前,如果该作品应该试图捕获另一个或移动。
class Piece(Board):
def __init__(self, piece, r, c):
self.piece = piece
self.r = r
self.c = c
def valid_move(self,r,c,r_offset,c_offset):
#r, c are integers for the coordinates on the board
#r_offset,c_offset are the cells the piece might move to
self.tgt_r, self.tgt_c = r+r_offset, c+c_offset
if self.tgt_r <= 7 or self.tgt_c >= 0:
return True
return False
def capture(self,r,c, r_offset, c_offset):
piece = self.piece
self.tgt_r, self.tgt_c = r+r_offset, c+c_offset
if self.tgt_r > 7 or self.tgt_c < 0:
return None
else:
nb = Board(curr).copy_board() #this board is just 8x8 np.array
nb[self.tgt_r,self.tgt_c], nb[r,c] = piece,'-'
return nb
def move(self,r,c, r_offset, c_offset):
piece = self.piece
self.tgt_r, self.tgt_c = r+r_offset, c+c_offset
if self.tgt_r > 7 or self.tgt_c < 0:
return None
else:
nb = Board(curr).copy_board()
nb[self.tgt_r,self.tgt_c], nb[r,c] = piece,'-'
return nb
一如既往地谢谢。
答案 0 :(得分:2)
<强> 1。我可以在类方法中以某种方式附加列表吗?
在班级中创建一个list
- piecesList
来存储各个部分:
class Piece(Board):
def __init__(self, piece, r, c):
self.piece = piece
self.r = r
self.c = c
self.piecesList = [] #or init using some argument if you want to use some list from outside of the class
无论何时调用capture
方法,只需将该文章附加到piecesList
:
def capture(self,r,c, r_offset, c_offset):
self.piecesList.append(self.piece)
piece = self.piece
<强> 2。如何从类中调用方法以在另一个方法中使用?
您只需使用self.method(arg1, arg2...)
:
def capture(self,r,c, r_offset, c_offset):
piece = self.piece
if self.valid_move(r,c,r_offset,c_offset) == False:
return None
else:
nb = Board(curr).copy_board() #this board is just 8x8 np.array
nb[self.tgt_r,self.tgt_c], nb[r,c] = piece,'-'
return nb