Как избежать дублирования в списке питонов - PullRequest
0 голосов
/ 26 апреля 2018

Я пытаюсь собрать немного логики для шахматной игры и застрял, убедившись, что не ставлю несколько фигур на одну клетку.Мой код на данный момент выглядит следующим образом, но я не уверен, где он не работает.

def add(self, pawn, x_coordinate, y_coordinate, piece_color):
        for each_pawn in self.pawns:
            if each_pawn.x_coordinate == x_coordinate and each_pawn.y_coordinate == y_coordinate:
                pawn.x_coordinate = -1
                pawn.y_coordinate = -1
            else:
                pawn.x_coordinate = x_coordinate
                pawn.y_coordinate = y_coordinate

        self.pawns.append(pawn)

Пешки заданы как пустой список в верхней части класса.Идея состоит в том, что создаваемая мной пешка попадает в список, затем, когда создаются любые последующие, она проверяет, имеют ли они одинаковые координаты, если она это делает, то она помещается в квадрат -1, -1, то есть вне поля.Я уверен, что это не особенно элегантно, но я новичок в Python и надеюсь вернуться и провести рефакторинг, когда у меня будут работать некоторые основные принципы.Спасибо за любую помощь!

Ответы [ 2 ]

0 голосов
/ 26 апреля 2018
class Pawn:
    def __init(x, y):
        self.x_coordinate = x
        self.y_coordinate = y

    @property
    def x_coordinate(self):
        return self.x_coordinate

    @x_coordinate.setter
    def x_corrdinate(x):
        self.x_coordinate = x    

    @property
    def y_coordinate(self):
        return self.y_coordinate

    @y_coordinate.setter
    def y_corrdinate(y):
        self.y_coordinate = y

    def __hash__(self):
        return hash(self.x_coordinate) ^ hash(self.y_coordinate)

    def __eq__(self, other):
        return self.x_coordinate == other. x_coordinate and self.x_coordinate == other.y_coordinate

В основном, напишите класс Pawn, который имеет координаты x и y, переопределите __eq__() метод и __hash__(), они будут использоваться, когда проверка if pawn not in pawns: __eq__() используется для проверки 2 экземпляра Pawn:равны или нет на основе их координат х и у.

Как использовать?

pawn = Pawn(-1, -1)
if pawn not in pawns:
    pawns.append(pawn)
0 голосов
/ 26 апреля 2018

В конце цикла pawn координаты будут соответствовать результату последней пешки, с которой она была протестирована.Добавьте оператор break после pawn.y_coordinate = -1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...