Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import collections
- from random import choice,shuffle
- Card = collections.namedtuple('Card',['rank','suit'])
- class FrenchDeck():
- ranks = [str(n) for n in range(2,11)] +list('JQKA')
- suits = 'spades diamonds clubs hearts'.split()
- def __init__(self):
- self.cards = [Card(rank,suit) for suit in self.suits
- for rank in self.ranks]
- def __len__(self):
- return len(self.cards)
- def __getitem__(self,position):
- return self.cards[position]
- deck = list(FrenchDeck())
- class Player():
- '''Create a player and deal a random hand.'''
- def __init__(self,name,hand,bankroll):
- self.name = name
- self.hand = hand
- self.bankroll = bankroll
- def holding(self,hand):
- return rank_the_hand(self.hand)
- def deal_a_hand(dadeck,howmanycards):
- hand = []
- '''Deal a random hand of n length and remove those cards from the deck.'''
- for i in range(howmanycards):
- z = choice(dadeck)
- hand.append(z)
- dadeck.remove(z)
- return hand
- def rank_the_hand(cards):
- wheel = [14,5,4,3,2]
- straight_id = [14,13,12,11,10,9,8,7,6,5,4,3,2,1]
- Flush = False
- Straight = False
- '''Final_hand variable returns the hand type i.e. straight flush(8), quads(7) or full house(6) etc. As well as a second list to store other info. '''
- final_hand = [0,[]]
- '''List of card ranks - Ace, King, 7, 3, 7 etc. (No suits) '''
- card_ranks = [card.rank for card in cards]
- '''List of card suits.'''
- card_suits = [card.suit for card in cards]
- if len(list(set(card_suits))) == 1:
- Flush = True
- '''Convert the ranks to numbers.'''
- for i in range(len(card_ranks)):
- try:
- card_ranks[i] = int(card_ranks[i])
- except:
- if card_ranks[i] == 'J':
- card_ranks[i] = 11
- elif card_ranks[i] == 'Q':
- card_ranks[i] = 12
- elif card_ranks[i] == 'K':
- card_ranks[i] = 13
- elif card_ranks[i]== 'A':
- card_ranks[i] = 14
- card_ranks = sorted(card_ranks,reverse=True)
- bernanners = collections.Counter(card_ranks)
- counts = bernanners.most_common(3)
- if len(set(card_ranks))==2:
- '''Four of a Kind. '''
- if counts[0][1]==4:
- final_hand[0]=7
- final_hand[1].append(counts[0][0])
- else:
- '''Full House. '''
- final_hand[0] = 6
- final_hand[1].append(counts[0][0])
- elif len(set(card_ranks))==3:
- if counts[0][1]==3:
- print('''Three of a Kind. ''')
- final_hand[0] = 3
- final_hand[1].append(counts[0][0])
- final_hand[1].append(card_ranks[3])
- final_hand[1].append(card_ranks[4])
- else:
- print('''Two Pair''')
- final_hand[0] = 2
- final_hand[1].append(counts[1][0])
- final_hand[1].append(counts[0][0])
- final_hand[1] = sorted(final_hand[1],reverse=True)
- final_hand[1].append(counts[2][0])
- elif len(list(set(card_ranks)))==4:
- '''One Pair.'''
- print('One Pair')
- final_hand[0] = 1
- final_hand[1].append(card_ranks[0])
- final_hand[1].append(card_ranks[2])
- final_hand[1].append(card_ranks[3])
- final_hand[1].append(card_ranks[4])
- else:
- '''Nothing, Straight, Flush or, Straight Flush. '''
- '''card_ranks[0] - card_ranks[4]'''
- for i in range(len(straight_id)):
- if straight_id[i:i+5]==card_ranks or card_ranks==wheel:
- Straight=True
- else:
- continue
- if Flush == True and Straight==True:
- print('Straight Flush')
- final_hand[0] = 8
- if card_ranks==wheel:
- final_hand[1].append(card_ranks[1])
- else:
- final_hand[1].append(card_ranks[0])
- else:
- if Flush == True:
- print('''Flush''')
- final_hand[0] = 5
- final_hand[1].append(card_ranks[0])
- final_hand[1].append(card_ranks[1])
- final_hand[1].append(card_ranks[2])
- final_hand[1].append(card_ranks[3])
- final_hand[1].append(card_ranks[4])
- elif Straight==True:
- print("""Straight""")
- final_hand[0] = 4
- if card_ranks==wheel:
- final_hand[1].append(card_ranks[1])
- else:
- final_hand[1].append(card_ranks[0])
- else:
- '''Interpret the high card. '''
- print('High Card')
- final_hand[0] = 0
- final_hand[1].append(card_ranks[0])
- final_hand[1].append(card_ranks[1])
- final_hand[1].append(card_ranks[2])
- final_hand[1].append(card_ranks[3])
- final_hand[1].append(card_ranks[4])
- return final_hand
- def winner(p1,p2):
- print('Lets see all hands, please. ')
- if p1[0]>p2[0]:
- return p1
- elif p2[0]>p1[0]:
- return p2
- else:
- for i in range(len(p1[1])):
- if p1[1][i]>p2[1][i]:
- return p1
- else:
- return p2
- def players_eval(showdown):
- '''Takes a list of players in Class form and returns a winner. '''
- players_hands = [i.hand for i in showdown]
- for i in range(len(players_hands)):
- print(winner(players_hands[i],players_hands[i+1]))
- return winner(players_hands[i],players_hands[i+1])
- shuffle(deck)
- steelwheel = rank_the_hand([Card(rank='6', suit='clubs'), Card(rank='5', suit='hearts'), Card(rank='4', suit='hearts'), Card(rank='2', suit='hearts'), Card(rank='A', suit='hearts')])
- fourofakind = rank_the_hand([Card(rank='A', suit='clubs'), Card(rank='A', suit='hearts'), Card(rank='A', suit='spades'), Card(rank='A', suit='diamonds'), Card(rank='2', suit='hearts')])
- fullhouse = rank_the_hand([Card(rank='Q', suit='clubs'), Card(rank='Q', suit='hearts'), Card(rank='Q', suit='diamonds'), Card(rank='2', suit='spades'), Card(rank='2', suit='hearts')])
- flush = rank_the_hand([Card(rank='K', suit='hearts'), Card(rank='5', suit='hearts'), Card(rank='4', suit='hearts'), Card(rank='2', suit='hearts'), Card(rank='7', suit='hearts')])
- Rocky = Player('Rocky', deal_a_hand(deck,5),100)
- Todd = Player('Todd', deal_a_hand(deck,5),100)
- Dave = Player('Dave', deal_a_hand(deck,5),100)
- Myrna = Player('Myrna', deal_a_hand(deck,5),100)
- Tom = Player('Tom', deal_a_hand(deck,5),100)
- Larry = Player('Larry',deal_a_hand(deck,5),100)
- players = [Rocky, Todd, Dave, Myrna, Tom, Larry]
- print(winner(fourofakind,fullhouse))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement