Python类:附加列表&纳入方法

时间:2017-10-15 00:47:59

标签: python class chess

我刚刚开始学习Python课程,我有一个简单的问题。我很惊讶它的代码有多简洁,但是我试图弄清楚以下是否可以解决我正在进行的国际象棋问题。

(1) 我可以从类方法中以某种方式附加列表吗?我试图弄清楚是否有积累方法每次调用 capture 时列表中的各个部分。

(2) 如何在类中调用方法以在另一个方法中使用?我希望能够检查移动是否有效甚至在进行之前,如果该作品应该试图捕获另一个或移动。

class Piece(Board):

def __init__(self, piece, r, c):
    self.piece = piece
    self.r = r
    self.c = c

这是我想要合并到下面的函数中的函数,以避免冗余(问题2)

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

这些功能目前是相同的。我试图看看如何使用捕获功能在他们采取后累积一系列碎片。 (问题1)

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

一如既往地谢谢。

1 个答案:

答案 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