In [69]:
# Write a Deck method named sort that uses the list method sort to sort the
# cards in a Deck. sort uses the __cmp__ method we defined to determine sort
# order.

# Current Status: Complete

from random import shuffle

class Card(object):
    """Represents a standard playing card."""

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

    suit_names = ['Clubs', 'Diamonds', 'Hearts', 'Spades']
    rank_names = [None, 'Ace', '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 __repr__(self):
        return 'Card <{}, {}>'.format(self.rank_names[self.rank], self.suit_names[self.suit])
    
    # I'm using the following 'rich comparison' methods in place of __cmp__ 
    # https://docs.python.org/2/reference/datamodel.html#object.__lt__
    
    def __lt__(self, other):
        return self.rank < other.rank
    
    def __gt__(self, other):
        return self.rank > other.rank
    
    def __eq__(self, other):
        return self.rank == other.rank



class Deck(object):
    def __init__(self):
        self.cards = [Card(suit, rank) for suit in range(4) for rank in range(1, 14)]
        
    def __str__(self):
        return '\n'.join([str(card) for card in self.cards])
    
    def __repr__(self):
        return "Deck <{}>".format(self.cards)
    
    def __len__(self):
        return len(self.cards)
    
    def shuffle(self):
        shuffle(self.cards)
        return "deck has been shuffled."
    
    def sort(self):
        self.cards.sort()
        return "deck has been sorted."
    



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


Ace of Clubs
Ace of Hearts
Ace of Spades
Ace of Diamonds
2 of Spades
2 of Diamonds
2 of Hearts
2 of Clubs
3 of Clubs
3 of Spades
3 of Hearts
3 of Diamonds
4 of Spades
4 of Clubs
4 of Hearts
4 of Diamonds
5 of Clubs
5 of Spades
5 of Hearts
5 of Diamonds
6 of Hearts
6 of Diamonds
6 of Clubs
6 of Spades
7 of Hearts
7 of Clubs
7 of Spades
7 of Diamonds
8 of Spades
8 of Clubs
8 of Diamonds
8 of Hearts
9 of Hearts
9 of Diamonds
9 of Clubs
9 of Spades
10 of Clubs
10 of Hearts
10 of Spades
10 of Diamonds
Jack of Hearts
Jack of Clubs
Jack of Spades
Jack of Diamonds
Queen of Clubs
Queen of Spades
Queen of Diamonds
Queen of Hearts
King of Spades
King of Hearts
King of Clubs
King of Diamonds

In [ ]:


In [ ]: