我创建了一个MarblesBoard类,用于实例化新的MarblesBoard对象。我想用Solver类来解决这个问题。
class MarblesBoard:
def __init__(self, marbles):
self.input = list(marbles)
print(marbles)
def switch(self):
self.input[1], self.input[0] = self.input[0], self.input[1]
print self.input
def rotate(self):
return self.input[1:] + self.input[:1]
print self.input
def is_solved(self):
if all(self.input[i] <= self.input[i+1] for i in range(len(self.input)-1)):
return True
print "True"
else:
print "Not solved!"
board = MarblesBoard((3,6,7,4,1,0,8,2,5))
board.switch()
board.rotate()
board.is_solved()
board
按预期工作。
class Solver:
def __init__(self, MarblesBoard):
print self
self.input = MarblesBoard
def solve(self):
if self.input[0] & self.input[1] != 0:
if self.input[1] < self.input[0]:
self.input.switch()
else:
self.input.rotate()
else:
self.input.rotate()
player = Solver(board)
player.solve()
给我AttributeError:MarblesBoard实例在求解函数中的self.input行时没有属性' getitem '。
答案 0 :(得分:1)
self.input
是MarblesBoard
类的一个实例,它包含一个也称为input
的变量。 MarblesBoard
没有实施__getitem__
方法来获取其内部self.input
列表,因此您必须自己进入
if self.input.input[0] & self.input.input[1] != 0:
第一个input
获取MarblesBoard
个实例,第二个input
获取实例内的list
。
假设我使用更具描述性的变量名称
实现了Solver
class Solver:
def __init__(self, MarblesBoard):
print self
self.marbles_board = MarblesBoard
...
然后使用它会更加明显
def solve(self):
if self.marble_board.input[0] & self.marble_board.input[1] != 0:
...