[Edu-sig] more casino math
kirby urner
kirby.urner at gmail.com
Fri Sep 4 22:56:15 CEST 2009
"""
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 at 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()
More information about the Edu-sig
mailing list