import random
class Card(object):
""" card from a deck of 52:
Attributes:
Suit,
Rank.
"""
suit_names = ['Clubs', 'Diamonds', 'Hearts', 'Spades']
rank_names = [None, None, '2', '3', '4', '5', '6', '7', '8', '9', '10', 'Jack', 'Queen', 'King', 'Ace']
def __init__(self, suit = 0, rank = 2):
self.suit = suit
self.rank = rank
def __str__(self):
if isinstance(self, Card):
return '%s of %s' % (self.rank_names[self.rank], self.suit_names[self.suit])
def __cmp__(self, other):
t1 = self.suit, self.rank
t2 = other.suit, other.rank
return cmp(t1, t2)
class Deck(object):
""" standard deck of 52 cards """
def __init__(self):
self.cards = []
for suit in range(4):
for rank in range(2, 15):
card = Card(suit, rank)
self.cards.append(card)
def __str__(self):
deck_list = []
for card in self.cards:
deck_list.append(str(card))
return '\n'.join(deck_list)
def pop_card(self):
return self.cards.pop()
def shuffle_deck(self):
random.shuffle(self.cards)
class Hand(object):
""" single poker hand,
attributes:
from Deck deck,
number of cards.
"""
def __init__(self,deck,n_cards):
self.cards = []
j_card = 0
while j_card < n_cards:
dealt_card = deck.pop_card()
self.cards.append(dealt_card)
j_card = j_card + 1
def __str__(self):
hand_list = []
for card in self.cards:
hand_list.append(str(card))
return '\n'.join(hand_list)
def score(self):
str_hand = str(self)
print 'Evaluate hand: \n',
B_flush = self.flush()
def flush(self):
suit_0 = self.cards[0].suit_names[self.cards[0].suit]
print '\nsuit of card 0 is', suit_0
return
n_cards = len(self.cards)
j_card = 1
while j_card < n_cards:
if self.cards[j_card].suit_names[self.cards[j_card].suit] != suit_0:
print self, 'is not a flush.'
return False
j_card = j_card + 1
print self, 'is a flush.'
return True
#my_card1= Card(2,12)
#my_card2 = Card(0,12)
#print my_card1, ' ' * 4, my_card2, ' ' * 4,'Comparison result: ', cmp(my_card1, my_card2)
deck = Deck()
# print deck
# print deck.cards[10]
deck.shuffle_deck()
# n_players = 4
n_cards = 5
hand1 = Hand(deck,n_cards)
# print hand1
hand1.score()
# dealt_card = deck.pop_card()
# print type(dealt_card)
# print dealt_card
# print len(deck.cards)
aW1wb3J0IHJhbmRvbQoKY2xhc3MgQ2FyZChvYmplY3QpOgogICAgIiIiIGNhcmQgZnJvbSBhIGRlY2sgb2YgNTI6CiAgICAgICAgQXR0cmlidXRlczoKICAgICAgICAgICAgU3VpdCwKICAgICAgICAgICAgUmFuay4KICAgICIiIgogICAgc3VpdF9uYW1lcyA9IFsnQ2x1YnMnLCAnRGlhbW9uZHMnLCAnSGVhcnRzJywgJ1NwYWRlcyddCiAgICByYW5rX25hbWVzID0gW05vbmUsIE5vbmUsICcyJywgJzMnLCAnNCcsICc1JywgJzYnLCAnNycsICc4JywgJzknLCAnMTAnLCAnSmFjaycsICdRdWVlbicsICdLaW5nJywgJ0FjZSddCgogICAgZGVmIF9faW5pdF9fKHNlbGYsIHN1aXQgID0gIDAsIHJhbmsgPSAyKToKICAgICAgICBzZWxmLnN1aXQgPSBzdWl0CiAgICAgICAgc2VsZi5yYW5rID0gcmFuawoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIGlmIGlzaW5zdGFuY2Uoc2VsZiwgQ2FyZCk6CiAgICAgICAgICAgIHJldHVybiAnJXMgb2YgJXMnICUgKHNlbGYucmFua19uYW1lc1tzZWxmLnJhbmtdLCBzZWxmLnN1aXRfbmFtZXNbc2VsZi5zdWl0XSkKCiAgICBkZWYgX19jbXBfXyhzZWxmLCBvdGhlcik6CiAgICAgICAgdDEgPSBzZWxmLnN1aXQsIHNlbGYucmFuawogICAgICAgIHQyID0gb3RoZXIuc3VpdCwgb3RoZXIucmFuawogICAgICAgIHJldHVybiBjbXAodDEsIHQyKQoKY2xhc3MgRGVjayhvYmplY3QpOgogICAgIiIiIHN0YW5kYXJkIGRlY2sgb2YgNTIgY2FyZHMgIiIiCiAgICAKICAgIGRlZiBfX2luaXRfXyhzZWxmKToKICAgICAgICBzZWxmLmNhcmRzID0gW10KICAgICAgICBmb3Igc3VpdCBpbiByYW5nZSg0KToKICAgICAgICAgICAgZm9yIHJhbmsgaW4gcmFuZ2UoMiwgMTUpOgogICAgICAgICAgICAgICAgY2FyZCA9IENhcmQoc3VpdCwgcmFuaykKICAgICAgICAgICAgICAgIHNlbGYuY2FyZHMuYXBwZW5kKGNhcmQpCgogICAgZGVmIF9fc3RyX18oc2VsZik6CiAgICAgICAgZGVja19saXN0ID0gW10KICAgICAgICBmb3IgY2FyZCBpbiBzZWxmLmNhcmRzOgogICAgICAgICAgICBkZWNrX2xpc3QuYXBwZW5kKHN0cihjYXJkKSkKICAgICAgICByZXR1cm4gJ1xuJy5qb2luKGRlY2tfbGlzdCkKIAogICAgZGVmIHBvcF9jYXJkKHNlbGYpOgogICAgICAgIHJldHVybiBzZWxmLmNhcmRzLnBvcCgpCgogICAgZGVmIHNodWZmbGVfZGVjayhzZWxmKToKICAgICAgICByYW5kb20uc2h1ZmZsZShzZWxmLmNhcmRzKQoKY2xhc3MgSGFuZChvYmplY3QpOgogICAgIiIiIHNpbmdsZSBwb2tlciBoYW5kLCAKICAgICAgICBhdHRyaWJ1dGVzOiAKICAgICAgICAgICAgZnJvbSBEZWNrIGRlY2ssCiAgICAgICAgICAgIG51bWJlciBvZiBjYXJkcy4KICAgICIiIgoKICAgIGRlZiBfX2luaXRfXyhzZWxmLGRlY2ssbl9jYXJkcyk6CiAgICAgICAgc2VsZi5jYXJkcyA9IFtdCiAgICAgICAgal9jYXJkID0gMAogICAgICAgIHdoaWxlIGpfY2FyZCA8IG5fY2FyZHM6CiAgICAgICAgICAgICBkZWFsdF9jYXJkID0gZGVjay5wb3BfY2FyZCgpCiAgICAgICAgICAgICBzZWxmLmNhcmRzLmFwcGVuZChkZWFsdF9jYXJkKQogICAgICAgICAgICAgal9jYXJkID0gal9jYXJkICsgMQoKICAgIGRlZiBfX3N0cl9fKHNlbGYpOgogICAgICAgIGhhbmRfbGlzdCA9IFtdCiAgICAgICAgZm9yIGNhcmQgaW4gc2VsZi5jYXJkczoKICAgICAgICAgICAgaGFuZF9saXN0LmFwcGVuZChzdHIoY2FyZCkpCiAgICAgICAgcmV0dXJuICdcbicuam9pbihoYW5kX2xpc3QpCgogICAgZGVmIHNjb3JlKHNlbGYpOgogICAgICAgIHN0cl9oYW5kID0gc3RyKHNlbGYpCiAgICAgICAgcHJpbnQgJ0V2YWx1YXRlIGhhbmQ6IFxuJywgCiAgICAgICAgQl9mbHVzaCA9IHNlbGYuZmx1c2goKQoKICAgIGRlZiBmbHVzaChzZWxmKToKICAgICAgICBzdWl0XzAgPSBzZWxmLmNhcmRzWzBdLnN1aXRfbmFtZXNbc2VsZi5jYXJkc1swXS5zdWl0XQogICAgICAgIHByaW50ICdcbnN1aXQgb2YgY2FyZCAwIGlzJywgc3VpdF8wCiAgICAgICAgcmV0dXJuCiAgICAgICAgbl9jYXJkcyA9IGxlbihzZWxmLmNhcmRzKQogICAgICAgIGpfY2FyZCA9IDEKICAgICAgICB3aGlsZSBqX2NhcmQgPCBuX2NhcmRzOgogICAgICAgICAgICBpZiBzZWxmLmNhcmRzW2pfY2FyZF0uc3VpdF9uYW1lc1tzZWxmLmNhcmRzW2pfY2FyZF0uc3VpdF0gIT0gc3VpdF8wOgogICAgICAgICAgICAgICAgcHJpbnQgc2VsZiwgJ2lzIG5vdCBhIGZsdXNoLicKICAgICAgICAgICAgICAgIHJldHVybiBGYWxzZQogICAgICAgICAgICBqX2NhcmQgPSBqX2NhcmQgKyAxCiAgICAgICAgcHJpbnQgc2VsZiwgJ2lzIGEgZmx1c2guJwogICAgICAgIHJldHVybiBUcnVlCgojbXlfY2FyZDE9IENhcmQoMiwxMikKI215X2NhcmQyID0gQ2FyZCgwLDEyKQojcHJpbnQgbXlfY2FyZDEsICcgJyAqIDQsIG15X2NhcmQyLCAnICcgKiA0LCdDb21wYXJpc29uIHJlc3VsdDogICcsIGNtcChteV9jYXJkMSwgbXlfY2FyZDIpCgpkZWNrID0gRGVjaygpCiMgcHJpbnQgZGVjawojIHByaW50IGRlY2suY2FyZHNbMTBdCmRlY2suc2h1ZmZsZV9kZWNrKCkKIyBuX3BsYXllcnMgPSA0Cm5fY2FyZHMgPSA1CmhhbmQxID0gSGFuZChkZWNrLG5fY2FyZHMpCiMgcHJpbnQgaGFuZDEKaGFuZDEuc2NvcmUoKQoKIyBkZWFsdF9jYXJkID0gZGVjay5wb3BfY2FyZCgpCiMgcHJpbnQgdHlwZShkZWFsdF9jYXJkKQojIHByaW50IGRlYWx0X2NhcmQKIyBwcmludCBsZW4oZGVjay5jYXJkcyk=