2017-03-10 68 views
0

我做了一個自定義類作爲練習,一副紙牌。我有一個函數可以用random.shuffle()函數來洗牌,但我似乎無法得到sort()的工作,我知道我只能重建套牌,但如果我在排序之前從卡組中刪除了卡牌,那就不起作用了它。 sort()sorted()是否需要定義多個__lt__自定義類和排序問題()

import random 

class Card: 
    """ Represents a card using a suit and a rank 
    suits are Clubs, Diamonds, Hearts, Spades represented by 0, 1, 2, 3 
    the ranks are 1 to 13 for Ace, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, Jack, Queen, King""" 

    def __init__(self, rank=2, suit=1): 
     self.rank = rank 
     self.suit = suit 

    suit_names = ['Clubs', 'Diamonds', 'Hearts', 'Spades'] 
    rank_names = [None, 'Ace', '1', '2', '3', '4', '5', '6', 
       '7', '8', '9', '10', 'Jack', 'Queen', 'King'] 

    def __str__(self): 
     return '%s of %s' %(Card.rank_names[self.rank], 
          Card.suit_names[self.suit]) 

    def __lt__(self, other): 
     return self.suit, self.rank < other.suit, other.rank 

class Deck: 
    """ Representing a deck of cards, containing one of each card """ 

    def __init__(self): 
     self.new_deck() 

    def new_deck(self): 
     self.cards = [] 
     for suit in range(4): 
      for rank in range(1, 14): 
       card = Card(rank, suit) 
       self.cards.append(card) 

    def __str__(self): 
     res = [] 
     for card in self.cards: 
      res.append(str(card)) 
     return '\n'.join(res) 

    def pop_card(self): 
     return self.cards.pop() 

    def add_card(self, card): 
     self.cards.append(card) 

    def shuffle(self): 
     random.shuffle(self.cards) 

    def sort(self): 
     self.cards.sort() 


deck = Deck() 
deck.shuffle() 
deck.sort() 
print(deck) 

Python會打印出隨機和deck.sort()只是不工作

+0

'__lt__'應該返回一個'bool',其中'self.suit,self.rank

+1

作爲一個側面評論,你有'rank_names'列表中的15個元素:'None'爲索引0和14個額外的。我想你應該刪除'1'。 – Adirio

回答

3

__lt__方法不返回bool,請嘗試以下操作:

def __lt__(self, other): 
    return (self.suit, self.rank) < (other.suit, other.rank) 

內元素的順序tuple可能會交換,如果這不給你想要的命令:

def __lt__(self, other): 
    return (self.rank, self.suit) < (other.rank, other.suit)