deck

A deck of playing cards

source

Deck


def Deck(
    
):

A deck of 52 cards, not including jokers

When we initially create a deck, all of the cards will be present:

deck = Deck()
deck
A♣️; 2♣️; 3♣️; 4♣️; 5♣️; 6♣️; 7♣️; 8♣️; 9♣️; 10♣️; J♣️; Q♣️; K♣️; A♦️; 2♦️; 3♦️; 4♦️; 5♦️; 6♦️; 7♦️; 8♦️; 9♦️; 10♦️; J♦️; Q♦️; K♦️; A❤️; 2❤️; 3❤️; 4❤️; 5❤️; 6❤️; 7❤️; 8❤️; 9❤️; 10❤️; J❤️; Q❤️; K❤️; A♠️; 2♠️; 3♠️; 4♠️; 5♠️; 6♠️; 7♠️; 8♠️; 9♠️; 10♠️; J♠️; Q♠️; K♠️

That should be 52 cards.

test_eq(len(deck), 52)

As a reminder, these are the suits we defined for a Card:

suits
['♣️', '♦️', '❤️', '♠️']

We can check if, say, the Ace of Clubs is in the deck:

Card(1,1) in deck
True

source

Deck.pop


def pop(
    idx:int=-1, # The index of the card to remove, defaulting to the last one
):

Remove one card from the deck

deck = Deck()
test_eq(deck.pop(), Card(3,13))  # K♠️

There are 51 cards left in the deck now.

test_eq(len(deck), 51)

source

Deck.remove


def remove(
    card:Card, # Card to remove
):

Removes card from the deck or raises exception if it is not there

card23 = Card(2, 3)
deck.remove(card23)

assert card23 not in deck

source

Deck.shuffle


def shuffle(
    
):

Shuffles the cards in this deck


source

draw_n


def draw_n(
    n:int, # number of cards to draw
    replace:bool=True, # whether or not draw with replacement
):

Draw n cards, with replacement iff replace

draw_n(13, replace=False)
[Q♠️, 8❤️, 3♦️, 7♣️, 2♣️, 9♦️, 9♠️, 7♠️, 4♠️, K♣️, A♣️, 4♣️, 5♦️]