#Playing Cards 2.0

class Card(object):
    """A playing card."""
    RANKS=["A","2","3","4","5","6","7","8","9","10","J","Q","K"]
    SUITS=["c","d","h","s"]
    def __init__(self,rank,suit):
        self.rank=rank
        self.suit=suit

    def __str__(self):
        rep=self.rank+self.suit
        return rep

class Hand(object):
    "A hand of playing cards."""
    def __init__(self):
        self.cards=[]

    def __str__(self):
        if self.cards:
            rep=""
            for card in self.cards:
                rep=rep+str(card)+" "
        else:
            rep="<empty>"
        return rep
        
    def clear(self):
        self.cards=[]

    def add(self,card):
        self.cards.append(card)
        
    def give(self,card,other_hand):
        self.cards.remove(card)
        other_hand.add(card)

class Deck(Hand):
    """A deck of playing cards."""
    def populate(self):
        for suit in Card.SUITS:
            for rank in Card.RANKS:
                self.add(Card(rank,suit))

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

    def deal(self,hands,per_hand=1):
        for rounds in range(per_hand):
            for hand in hands:
                if self.cards:
                    top_cards=self.cards[0]
                    self.give(top_cards,hand)
                else:
                    print("can't continue deal. Out of cards!")

deck1=Deck()
print ("Create a new deck.")
print ("Deck:")
print (deck1)

deck1.populate()

print("\nPopulate the deck.")
print("Deck:")
print(deck1)

deck1.shuffle()

print("\nShuffled the deck.")
print("Deck:")
print(deck1)

my_hand=Hand()
your_hand=Hand()
hands=[my_hand,your_hand]

deck1.deal(hands,per_hand=5)

print("\nDealt 5 cards to my hand and your hand.")
print("My_hand:")
print(my_hand)
print("your_hand:")
print(your_hand)
print("Deck:")
print(deck1)

print "Deck:",deck1
input("\n\nPress the enter key to exit.")
