气泡分选开关和旋转挑战

时间:2018-10-23 02:01:29

标签: python python-3.x list sorting

我正在尝试创建一个MarblesBoard类,其中还包含切换和旋转功能。

我的代码如下:

class MarblesBoard():
def __init__(self, balls):
    self.balls = balls
def __repr__(self):
    return " ".join(str(i) for i in self.balls)

def switch(self):
    lst=list(self.balls)
    lst[0], lst[1] = lst[1], lst[0]        
    return lst

def rotate(self): 
    lst=list(self.balls)
    lst = lst[1:]+lst[:1]
    return self.balls

输出应该像:

>>> board = MarblesBoard((3,6,7,4,1,0,8,2,5)) 
>>> board 
3 6 7 4 1 0 8 2 5 
>>> board.switch() 
>>> board 
6 3 7 4 1 0 8 2 5 
>>> board.rotate() 
>>> board 
3 7 4 1 0 8 2 5 6 
>>> board.switch() 
>>> board 
7 3 4 1 0 8 2 5 6

但是,当我使用切换或旋转功能时,它可以称为原始球列表。不知道如何解决这个问题。

2 个答案:

答案 0 :(得分:1)

您实际上并没有修改const maxIndex = (a) => { const max = Math.max(...a); return a.indexOf(max); }; console.log(maxIndex([0, -1, -2])); console.log(maxIndex([])); console.log(maxIndex([30, 50, 40]));,只是返回了已修改的列表。

如果您希望保持方法基本相同,并继续使用元组,则可以通过执行以下操作来更改self.balls的定义,以将更改实际写入switch()

self.balls

同样,您可以将 def switch(self): lst=list(self.balls) lst[0], lst[1] = lst[1], lst[0] self.balls = tuple(lst) 更改为以下内容:

rotate()

答案 1 :(得分:0)

您的方法正在返回列表。如果要修改对象,则必须更改self.balls而不是return。像这样:

class MarblesBoard:

    def __init__(self, balls):
        self.balls = balls

    def __repr__(self):
        return " ".join(str(i) for i in self.balls)

    def switch(self):
        self.balls[0], self.balls[1] = self.balls[1], self.balls[0]

    def rotate(self):
        self.balls = self.balls[1:] + self.balls[:1]