I found the conversation of dealing cards interesting, so I took a few
minutes (about 20 while I waited for a production run to finish) and
came up with the following Dealer class.  I come with a long
history of coding in C/C++ and have been told my code looks like it
(notice, in particular the nested "for" loops in the Shuffle
method).  What type of Pythonic changes would make this? 
What features would be nice?  This was just for fun, so let's not
take it too seriously!<br>
<br>
--greg<br>
<br>
- - - - Start Snippet - - - - - - - - - -<br>
#!/usr/bin/python<br>
from random import shuffle<br>
<br>
class Dealer(object):<br>
&nbsp;&nbsp; # define your deck here<br>
&nbsp;&nbsp; SUITS = ('Spades', 'Hearts', 'Clubs', 'Diamonds')<br>
&nbsp;&nbsp; RANKS = ('2','3','4','5','6','7','8','9','10','Jack','Queen','King','Ace')<br>
<br>
&nbsp;&nbsp; def __init__(self, decks=1, suits=SUITS, ranks=RANKS):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.number_of_decks = decks<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.suits = suits<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.ranks = ranks<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.Shuffle()<br>
<br>
&nbsp;&nbsp; def Shuffle(self):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; self.deck = []<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for deck in range(self.number_of_decks):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for suit in self.suits:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; for rank in self.ranks:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
self.deck.append('%s of %s'%(rank,suit))<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; shuffle(self.deck)<br>
<br>
&nbsp;&nbsp; def Deal(self):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; '''Return the top card from the deck, or None if the deck is depleated'''<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if len(self.deck) &gt; 0:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; card = self.deck[0]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; del self.deck[0]<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return card<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; else:<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return None<br>
<br>
###############################################################################<br>
### Unit Test #################################################################<br>
###############################################################################<br>
if __name__ == '__main__':<br>
&nbsp;&nbsp; dealer = Dealer()<br>
&nbsp;&nbsp; for n in range(10):<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; print dealer.Deal()<br>
<br>
- - - - End Snippet - - - - -<br>
<br>
Which yields:<br>
&nbsp;&nbsp;&nbsp; 2 of Clubs<br>
&nbsp;&nbsp;&nbsp; 7 of Diamonds<br>
&nbsp;&nbsp;&nbsp; 9 of Diamonds<br>
&nbsp; Ace of Diamonds<br>
&nbsp;Jack of Hearts<br>
&nbsp;King of Hearts<br>
&nbsp;&nbsp;&nbsp; 8 of Clubs <br>
&nbsp;King of Clubs<br>
&nbsp;&nbsp;&nbsp; 5 of Spades<br>
&nbsp;&nbsp;&nbsp; 3 of Hearts<br>
<br>
<br>
<br>