mirror of
https://github.com/correl/euler.git
synced 2024-11-27 19:19:50 +00:00
Added classes for Decks and Players
git-svn-id: file:///srv/svn/euler@16 e5f4c3ec-3c0c-11df-b522-21efaa4426b5
This commit is contained in:
parent
71973e170f
commit
67e0a4dafd
1 changed files with 73 additions and 3 deletions
74
054/poker.py
74
054/poker.py
|
@ -1,4 +1,5 @@
|
||||||
import operator
|
import operator
|
||||||
|
import random
|
||||||
|
|
||||||
class InvalidCard(Exception):
|
class InvalidCard(Exception):
|
||||||
"""Invalid Card Exception
|
"""Invalid Card Exception
|
||||||
|
@ -54,6 +55,32 @@ class Card:
|
||||||
val = k
|
val = k
|
||||||
return str.format('{0}{1}', val, self.suit)
|
return str.format('{0}{1}', val, self.suit)
|
||||||
|
|
||||||
|
class Deck():
|
||||||
|
def __init__(self):
|
||||||
|
self.__cards = []
|
||||||
|
for suit in Card.SUITS.values():
|
||||||
|
for i in range(2,15):
|
||||||
|
if i >= 10:
|
||||||
|
for k, v in Card.VALUES.iteritems():
|
||||||
|
if i == v: value = k
|
||||||
|
else:
|
||||||
|
value = i
|
||||||
|
self.__cards.append(Card('{0}{1}'.format(value, suit)))
|
||||||
|
def shuffle(self):
|
||||||
|
random.shuffle(self.__cards)
|
||||||
|
def cards(self):
|
||||||
|
return self.__cards
|
||||||
|
def deal(self, n=1, players=[]):
|
||||||
|
if players:
|
||||||
|
for i in range(n):
|
||||||
|
for player in players:
|
||||||
|
player.add_card(self.__cards.pop())
|
||||||
|
else:
|
||||||
|
cards = []
|
||||||
|
for i in range(n):
|
||||||
|
cards.append(self.__cards.pop())
|
||||||
|
return cards
|
||||||
|
|
||||||
class Hand:
|
class Hand:
|
||||||
HIGH_CARD = 0
|
HIGH_CARD = 0
|
||||||
ONE_PAIR = 1
|
ONE_PAIR = 1
|
||||||
|
@ -87,7 +114,7 @@ class Hand:
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
"""Builds a string representation of the hand"""
|
"""Builds a string representation of the hand"""
|
||||||
return str.format("Cards: {0} Rank: '{1}' Values: {2}",
|
return str.format("Cards: {0} Rank: '{1}' Values: {2}",
|
||||||
[str(c.value) + c.suit for c in self.__cards],
|
self.__cards,
|
||||||
Hand.RANKS[self.rank()],
|
Hand.RANKS[self.rank()],
|
||||||
self.values())
|
self.values())
|
||||||
def rank(self):
|
def rank(self):
|
||||||
|
@ -140,7 +167,7 @@ class Hand:
|
||||||
self.__rank = Hand.TWO_PAIRS
|
self.__rank = Hand.TWO_PAIRS
|
||||||
else:
|
else:
|
||||||
self.__rank = Hand.FULL_HOUSE
|
self.__rank = Hand.FULL_HOUSE
|
||||||
else:
|
elif multiples:
|
||||||
if multiples[0][1] > 3:
|
if multiples[0][1] > 3:
|
||||||
self.__rank = Hand.FOUR_OF_A_KIND
|
self.__rank = Hand.FOUR_OF_A_KIND
|
||||||
elif multiples[0][1] == 3:
|
elif multiples[0][1] == 3:
|
||||||
|
@ -307,3 +334,46 @@ class Hand:
|
||||||
if (result != 0):
|
if (result != 0):
|
||||||
return result
|
return result
|
||||||
return result
|
return result
|
||||||
|
|
||||||
|
class Player:
|
||||||
|
def __init__(self, name):
|
||||||
|
self.__name = name
|
||||||
|
self.__hand = None
|
||||||
|
self.__cards = []
|
||||||
|
self.__community_cards = []
|
||||||
|
def add_card(self, card, community=False):
|
||||||
|
if community:
|
||||||
|
self.__community_cards.append(card)
|
||||||
|
else:
|
||||||
|
self.__cards.append(card)
|
||||||
|
|
||||||
|
# Rebuild and re-evaluate hand
|
||||||
|
self.__hand = Hand.create_best_hand([str(c) for c in self.__community_cards + self.__cards])
|
||||||
|
def hand(self):
|
||||||
|
return self.__hand
|
||||||
|
def __repr__(self):
|
||||||
|
return '"{0}"\n\tCards: {1}\n\tHand: {2}'.format(self.__name, self.__cards, self.__hand)
|
||||||
|
def __cmp__(self, other):
|
||||||
|
return cmp(self.hand(), other.hand())
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
deck = Deck()
|
||||||
|
deck.shuffle()
|
||||||
|
players = []
|
||||||
|
for i in range(1,10):
|
||||||
|
players.append(Player('Player {0}'.format(i)))
|
||||||
|
community_cards = []
|
||||||
|
deck.deal(2, players)
|
||||||
|
deck.deal()
|
||||||
|
community_cards.extend(deck.deal(3))
|
||||||
|
deck.deal()
|
||||||
|
community_cards.extend(deck.deal())
|
||||||
|
deck.deal()
|
||||||
|
community_cards.extend(deck.deal())
|
||||||
|
for player in players:
|
||||||
|
for card in community_cards:
|
||||||
|
player.add_card(card, True)
|
||||||
|
players = sorted(players, reverse=True)
|
||||||
|
print 'Community', community_cards
|
||||||
|
for player in players:
|
||||||
|
print player
|
Loading…
Reference in a new issue