[英]Avoiding duplication in a python list
我試圖為國際象棋游戲整理一些邏輯,並努力確保不會在同一方塊上放置多個棋子。 目前,我的代碼如下,但是我不確定它在哪里不起作用。
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的新手,希望當我有一些基礎知識工作時再回來重構。 謝謝你的幫助!
在循環的末尾, pawn
的坐標將對應於對其進行測試的最后一個pawn的結果。 在pawn.y_coordinate = -1
之后添加break
語句。
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
基本上,寫一個類兵其具有x和y坐標,重寫__eq__()
方法和__hash__()
它們將在檢查中使用if pawn not in pawns:
所述__eq__()
是用來驗證2兵實例是相等的或不根據它們的x和y坐標。
如何使用?
pawn = Pawn(-1, -1)
if pawn not in pawns:
pawns.append(pawn)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.