from random import shuffle
# define the cards
suits = ["Hearts", "Diamonds", "Clubs", "Spades"]
values = ['A','2','3','4','5','6','7','8','9','10','J','Q','K']
class Card:
def __init__(self, suit, value):
self.suit = suit
self.value = value
# define each card
def __repr__(self):
return f"{self.value} of {self.suit}"
class Deck:
# all combinations of cards
def __init__(self):
self.cards = [Card(suit, value) for suit in suits for value in values]
# count number of cards in a deck
def count(self):
return len(self.cards)
# showing the count
def __repr__(self):
return f"Deck of {self.count()} cards"
# the shuffle instance
def shuffle(self):
cards = self.cards
if self.count() < len(self.cards):
raise ValueError("Missing cards! Can't be shuffled")
else:
shuffle(cards)
return cards
# deal x number cards each time
def _deal(self, number):
count = self.count()
if number > count:
raise ValueError("No more cards to deal!")
else:
cards = self.cards[:number]
self.cards = self.cards[number:]
return cards
# deal a single card each time
def deal_card(self):
cards = self._deal(1)
return cards
# deal a list of cards each time
def deal_hand(self, number):
cards = self._deal(number)
return cards
# define each card
card1 = Card("Hearts", "4")
card1
4 of Hearts
# number of cards in a deck
deck = Deck()
deck
Deck of 52 cards
# shuffle the deck
deck.shuffle()
[2 of Diamonds, 8 of Hearts, 10 of Hearts, K of Hearts, 3 of Clubs, J of Hearts, 5 of Spades, Q of Hearts, 8 of Diamonds, J of Diamonds, 7 of Diamonds, 4 of Hearts, Q of Spades, Q of Clubs, 6 of Spades, 4 of Spades, A of Hearts, 9 of Diamonds, J of Clubs, 4 of Diamonds, 7 of Clubs, 10 of Clubs, J of Spades, 5 of Diamonds, 3 of Diamonds, 6 of Clubs, 8 of Clubs, 7 of Hearts, A of Diamonds, 7 of Spades, 5 of Hearts, 2 of Hearts, 6 of Hearts, K of Diamonds, 2 of Clubs, 10 of Diamonds, K of Spades, 8 of Spades, 5 of Clubs, 3 of Hearts, 6 of Diamonds, 4 of Clubs, Q of Diamonds, K of Clubs, 9 of Clubs, A of Spades, A of Clubs, 9 of Spades, 3 of Spades, 9 of Hearts, 2 of Spades, 10 of Spades]
# deal a single card
deck.deal_card()
[2 of Diamonds]
# deal several cards
deck.deal_hand(3)
[8 of Hearts, 10 of Hearts, K of Hearts]
# deal more cards
deck._deal(10)
[3 of Clubs, J of Hearts, 5 of Spades, Q of Hearts, 8 of Diamonds, J of Diamonds, 7 of Diamonds, 4 of Hearts, Q of Spades, Q of Clubs]
# only 38 cards left
deck
Deck of 38 cards