""" By Kirby Urner, 4Dsolutions.net for Oregon Curriculum Network (copyleft) 2009 casino_math was originally developed as part of a pilot project for gnu math teachers in the Greater Portland area Bug reports: kirby.urner@gmail.com Code repository: 4dsolutions.net/ocn/python """ import random class Deck: """ Primitive 54 card deck, including the two jokers S13 means King of Spades, H12 means Queen of Hearts You could enhance this, have less austere labeling. """ def __init__(self): self.deck = [ # our list of 54 cards (suit + str(rank)) for suit in ['H','D','C','S'] for rank in range(1,14) ] + ['joker']*2 def deal_off_top(self): if len(self.deck) > 0: return self.deck.pop(0) def deal_off_bottom(self): if len(self.deck) > 0: return self.deck.pop(-1) def shuffle(self): # typically done immediately after __init__ random.shuffle(self.deck) @property #read only def howmany(self): return len(self.deck) class Hand: """ Subclass at will! To see A's cards, go A() i.e. A is "running its mouth" """ def __init__(self, playername): self.playername = playername self.cards = [] def sort_cards(self): # alpha sort, so H10 before H7, feel free to enhance self.cards.sort() def get_card(self, thecard): self.cards.append(thecard) def random_card(self): if len(self.cards)>0: return self.cards.pop(random.choice( range(len(self.cards)))) def __repr__(self): return "Hand(%s)" % self.playername def __call__(self): # blab about cards return self.cards def unit_test(): """ Script: Deal five cards round robin to four players from shuffled deck. Each player shows sorta sorted cards. Each player discards random card. Each player shows cards a 2nd time. Action: >>> import casino_math >>> casino_math.unit_test() Hand(Tagrid) ['H10', 'H6', 'S2', 'S4', 'S5'] Hand(Jeena) ['D12', 'D8', 'H13', 'S13', 'joker'] Hand(Abaz) ['C10', 'C12', 'D11', 'H7', 'S6'] Hand(Foobot) ['C11', 'C2', 'C4', 'D9', 'H11'] Hand(Tagrid) S4 Hand(Jeena) joker Hand(Abaz) D11 Hand(Foobot) H11 Hand(Tagrid) ['H10', 'H6', 'S2', 'S5'] Hand(Jeena) ['D12', 'D8', 'H13', 'S13'] Hand(Abaz) ['C10', 'C12', 'H7', 'S6'] Hand(Foobot) ['C11', 'C2', 'C4', 'D9'] """ thedeck = Deck() thedeck.shuffle() theplayers = [] for player in ['Tagrid','Jeena','Abaz','Foobot']: theplayers.append(Hand(player)) for deal in range(5): # 0-4 for player in theplayers: player.get_card(thedeck.deal_off_top()) for player in theplayers: #blabber cycle player.sort_cards() print(player, player()) for player in theplayers: print(player, player.random_card()) for player in theplayers: #blabber cycle print(player, player()) # explain this to your students if __name__ == "__main__": unit_test()
participants (1)
-
kirby urner