import random SUITS = ['Hearts', 'Diamonds', 'Clubs', 'Spades'] RANKS = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A'] RANK_VALUES = {rank: i for i, rank in enumerate(RANKS, 2)} def create_deck(): return [(rank, suit) for suit in SUITS for rank in RANKS] def deal_hand(deck, num=5): hand = random.sample(deck, num) for card in hand: deck.remove(card) return hand def hand_rank(hand): ranks = sorted([RANK_VALUES[card[0]] for card in hand], reverse=True) suits = [card[1] for card in hand] rank_counts = {r: ranks.count(r) for r in ranks} is_flush = len(set(suits)) == 1 is_straight = all(ranks[i] - 1 == ranks[i+1] for i in range(len(ranks)-1)) counts = sorted(rank_counts.values(), reverse=True) if is_straight and is_flush: return (8, ranks) # Straight flush elif counts[0] == 4: return (7, ranks) # Four of a kind elif counts[0] == 3 and counts[1] == 2: return (6, ranks) # Full house elif is_flush: return (5, ranks) # Flush elif is_straight: return (4, ranks) # Straight elif counts[0] == 3: return (3, ranks) # Three of a kind elif counts[0] == 2 and counts[1] == 2: return (2, ranks) # Two pair elif counts[0] == 2: return (1, ranks) # One pair else: return (0, ranks) # High card def show_hand(hand): return '\n '.join([f"{rank} of {suit}" for rank, suit in hand]) def main(): deck = create_deck() random.shuffle(deck) player1 = deal_hand(deck) player2 = deal_hand(deck) print("Player 1's hand:\n", show_hand(player1)) print() print("Player 2's hand:\n", show_hand(player2)) rank1 = hand_rank(player1) rank2 = hand_rank(player2) if rank1 > rank2: print("Player 1 wins! with rank:", rank1) print("Player 2 loses with rank:", rank2) elif rank2 > rank1: print("Player 2 wins! with rank:", rank2) print("Player 1 loses with rank:", rank1) else: print("It's a tie!") print("Both players have rank:", rank1) if __name__ == "__main__": main()