2017-07-28 45 views
-2

我如何排序「cardsListObj」西裝,然後排名?
我做了一些像「打印(cardsListObj.sort(key = card.getRank))」,但它沒有工作,我有「無」。
其實我對另一個與此相同的代碼(在我看來是一個新手)做了這樣的工作。 (代碼爲300線,這就是爲什麼我沒有將它張貼在這裏)排序列表objects_python_3

class card : 

    def __init__ (self, rank, suit) : 

     self.rank = rank # cards numbers 
     self.suit = suit # cards characters Diamonds, Clubs, Hearts, Spades 

    def getRank (self): 

     return self.rank 

    def getSuit (self): 

     return self.suit 

def main(): 

    cards = open (input ("file? ")) 
    cardsListObj = [] 

    for i in cards: 

     cardObj = card (i.split() [0], i.split() [1]) 
     cardsListObj.append (cardObj) 

輸入文件是有數量和卡用空格隔開,每行一個名稱的txt文件。

在此先感謝

+0

你是否在做類似'print(cardsListObj.sort(...',也許? '.sort()'返回None,它的實際輸出是對你調用的列表的修改。你需要一個單獨的'print(cardsListObj)'來查看排序後的列表。 – jasonharper

+0

謝謝,我得到了一個「無」的觀點,但使用print(cardsListObj)通過定義的鍵給出了排序對象的位置。我還在尋找一種方法,在排序後查看對象的屬性列表。 (是否有可能?) – paul

+0

我不確定我是否理解你的問題,但可能需要在你的類上定義'__str __()'和'__repr()__'方法,以便它的實例打印出你想要的,而不是「」。 – jasonharper

回答

0

,如果你想你的卡進行排序,你可以創建這樣的功能:

from operator import attrgetter 

def sort_cards(cards): #cards is an list containing 'Cards' objects 
    """Function sorting cards""" 

    return sorted(cards, key=attrgetter('suit', 'rank')) 

deck = [ 
    Cards(3, 'Diamonds'), 
    Cards(7, 'Clubs'), 
    Cards(5, 'Hearts'), 
    Cards(8, 'Diamonds'), 
    Cards(4, 'Spades'), 
    Cards(10, 'Clubs') 
] 
print(sort_cards(deck)) 

輸出(你應該定義的方法__repr__

['7 of Clubs', '10 of Clubs', '3 of Diamonds', '8 of Diamonds', '5 of Hearts', '4 of Spades'] 

NB: 在我的例子中,__repr__就是這樣的:

class Card: 

[...] 

def __repr__(self): 
    return '%d of %s' % (self.rank, self.suit)