PKv%KfY/deck.py'''Implementation of the deck collection type.''' __version__ = '2.0' import collections import enum import itertools import random class Suit(enum.Enum): Hearts = '♥' Spades = '♠' Clubs = '♣' Diamonds = '♦' class Value(enum.IntEnum): Ace = 1 Two = 2 Three = 3 Four = 4 Five = 5 Six = 6 Seven = 7 Eight = 8 Nine = 9 Ten = 10 Jack = 11 Queen = 12 King = 13 class Card: def __init__(self, suit=None, value=None, joker=False): self.joker = joker if self.joker: self.suit, self.value = None, None else: if value is None: self.suit, self.value = suit else: self.suit = suit self.value = value def __repr__(self): return "Card(joker=True)" if self.joker else f"Card({self.suit!r}, {self.value!r})" def __str__(self): return "Joker" if self.joker else f"{self.value.value}{self.suit.value}" class Deck(collections.deque): def __init__(self, include_jokers=True): super().__init__(map(Card, itertools.product( Suit.__members__.values(), Value.__members__.values() ))) if include_jokers: self.append(Card(joker=True)) self.append(Card(joker=True)) def shuffle(self, rng=random): rng.shuffle(self) deal = collections.deque.pop deal_from_bottom = collections.deque.popleft collections.deck = Deck if __name__ == '__main__': # Basic tests d = Deck() assert len(d) == 54 d = Deck(include_jokers=False) assert len(d) == 52 PK!H}0RRdeck-2.0.dist-info/WHEEL1 0 RZtMDtPI{w<wUnbaKM*A1ѭ g\Ic c~PK!HoeRdeck-2.0.dist-info/METADATAOJ@WD[PP,vXc6P;PWn`* A$m6* 9c rhA:%%QQkiFءS>\eB 3?KPK!HH)}deck-2.0.dist-info/RECORDmAr0@g H."U887Bդq7Ec_H#q'_dJSTcq[Ŭ*E$Y]*zuax-b;6UߐVopqK+- 9tsʥo03Ve|[CJCҷX&NX%v'][J#rʀ1xg"4xPKv%KfY/deck.pyPK!H}0RRdeck-2.0.dist-info/WHEELPK!HoeRldeck-2.0.dist-info/METADATAPK!HH)}deck-2.0.dist-info/RECORDPK