blob: a77766eb7a5f41cfc46831d83f7739abaddac441 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
|
from __future__ import annotations
import random
from enum import Enum, unique, auto
@unique
class CardSuit(Enum):
SPADES = auto()
HEARTS = auto()
DIAMONDS = auto()
CLUBS = auto()
@classmethod
def get_random(cls) -> CardSuit:
return random.choice(list(cls))
def __str__(self) -> str:
if not isinstance(self, CardSuit):
raise TypeError("can only convert CardSuit to str")
if self is CardSuit.SPADES: return "\\\u2660"
elif self is CardSuit.HEARTS: return "\\\u2665"
elif self is CardSuit.DIAMONDS: return "\\\u2666"
elif self is CardSuit.CLUBS: return "\\\u2663"
@unique
class CardRank(Enum):
ACE = auto()
TWO = auto()
THREE = auto()
FOUR = auto()
FIVE = auto()
SIX = auto()
SEVEN = auto()
EIGHT = auto()
NINE = auto()
TEN = auto()
JACK = auto()
QUEEN = auto()
KING = auto()
@classmethod
def get_random(cls) -> CardRank:
return random.choice(list(cls))
def get_value(self) -> int:
if self is CardRank.ACE: return 1
elif self is CardRank.TWO: return 2
elif self is CardRank.THREE: return 3
elif self is CardRank.FOUR: return 4
elif self is CardRank.FIVE: return 5
elif self is CardRank.SIX: return 6
elif self is CardRank.SEVEN: return 7
elif self is CardRank.EIGHT: return 8
elif self is CardRank.NINE: return 9
elif self is CardRank.TEN: return 10
elif self is CardRank.JACK: return 10
elif self is CardRank.QUEEN: return 10
elif self is CardRank.KING: return 10
def __str__(self) -> str:
if not isinstance(self, CardRank):
raise TypeError("can only convert CardRank to str")
if self is CardRank.ACE: return "A"
elif self is CardRank.TWO: return "2"
elif self is CardRank.THREE: return "3"
elif self is CardRank.FOUR: return "4"
elif self is CardRank.FIVE: return "5"
elif self is CardRank.SIX: return "6"
elif self is CardRank.SEVEN: return "7"
elif self is CardRank.EIGHT: return "8"
elif self is CardRank.NINE: return "9"
elif self is CardRank.TEN: return "10"
elif self is CardRank.JACK: return "J"
elif self is CardRank.QUEEN: return "Q"
elif self is CardRank.KING: return "K"
class Card:
def __init__(self, suit: CardSuit = None, rank: CardRank = None) -> None:
self.suit = CardSuit.get_random() if suit is None else suit
self.rank = CardRank.get_random() if rank is None else rank
def __repr__(self) -> str:
return f"<Card {self.suit.name}, {self.rank.name}>"
def __str__(self) -> str:
return f"{self.suit}{self.rank}"
|