переключатель сортировки пузырьков и поворот - PullRequest
0 голосов
/ 23 октября 2018

Я пытаюсь создать класс 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 голосов
/ 23 октября 2018

Вы на самом деле не изменяете 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() на что-то вроде этого:

  def rotate(self): 
      lst=list(self.balls)
      lst = lst[1:]+lst[:1]
      self.balls=tuple(lst)
0 голосов
/ 23 октября 2018

Ваши методы возвращают списки.Если вы хотите изменить объект, вы должны изменить self.balls вместо return ing.Как это:

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]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...