Python 在另一个类中调用一个类';while loop是什么?
我正试图找出如何让solve(一种冒泡排序算法变体)正常工作。它应该以MarblesBoard类为例,然后切换前两项(如果两者都不为0)或旋转它们,打印电路板并重复,直到解决为止(大理石按升序排序) 以下是大理石板课程:Python 在另一个类中调用一个类';while loop是什么?,python,Python,我正试图找出如何让solve(一种冒泡排序算法变体)正常工作。它应该以MarblesBoard类为例,然后切换前两项(如果两者都不为0)或旋转它们,打印电路板并重复,直到解决为止(大理石按升序排序) 以下是大理石板课程: class MarblesBoard: def __init__(self, marbles): self.input = list(marbles) print(marbles) def switch(self):
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()
以下是解算器类:
class Solver:
def __init__(self, MarblesBoard):
#print self
self.board = MarblesBoard
def solve(self):
if all(self.board.input[i] <= self.board.input[i+1] for i in range(len(self.board.input)-1)):
return True
#break
else:
if self.board.input[0] & self.board.input[1] != 0:
if self.board.input[1] < self.board.input[0]:
self.board = self.board.switch()
print self.board
else:
self.board = self.board.rotate()
print self.board
else:
self.board = self.board.rotate()
print self.board
return
player = Solver(board)
player.solve()
我不认为return在我的Sorter类中可以像我希望的那样工作,我已经尝试用while循环替换初始if-else,在条件为false时将所有内部if-else循环放在其中。这导致了一个无限循环。请告知。您的错误描述太模糊了,至少对我来说是这样。对我来说也太模糊了。顺便说一句,您不应该将变量命名为与类名称相同的名称,这很危险。我希望第一个内部if循环继续工作,直到主外部if循环返回true。您的rotate方法不适合您的使用。您只是返回值,而不存储它们。你说的是循环,没有循环。你只有if条件。我编辑了我的代码(见原始帖子),在solve方法中的每个操作之后更改了板。我还删除了除一条return语句之外的所有语句,我希望它能够循环主if-else语句。事实似乎并非如此。我想避免无限循环。建议?
class Solver:
def __init__(self, MarblesBoard):
#print self
self.board = MarblesBoard
def solve(self):
if all(self.board.input[i] <= self.board.input[i+1] for i in range(len(self.board.input)-1)):
return True
#break
else:
if self.board.input[0] & self.board.input[1] != 0:
if self.board.input[1] < self.board.input[0]:
self.board = self.board.switch()
print self.board
else:
self.board = self.board.rotate()
print self.board
else:
self.board = self.board.rotate()
print self.board
return
player = Solver(board)
player.solve()
[6, 7, 4, 1, 0, 8, 2, 5, 3]