-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeck.py
More file actions
87 lines (73 loc) · 2.48 KB
/
deck.py
File metadata and controls
87 lines (73 loc) · 2.48 KB
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
87
import random
class Deck:
def __init__(self, num):
self._items = []
if num == 52:
# Создать колоду, начиная с двойки
self._create_deck(2)
elif num == 36:
# Создать колоду, начиная с шестерки
self._create_deck(6)
else:
raise Exception('Неверный размер колоды. Используйте 52 или 36')
def _create_deck(self, n, m=15, z=4):
"""
Инициализация колоды
:param n: int Номер стартовой карты
:param m: int Номер последней карты
:param z: int Число мастей в колоде
:return: None
"""
# Перебор весов карт
for i in range(n, m):
# Перебор мастей карт
for j in range(z):
self._items.append(Card(i, j))
def shuffle(self):
"""
Перемешивание колоды
:return: None
"""
random.shuffle(self._items)
def get_card(self):
# Получение размера колоды и проверка на пустоту
l = len(self)
if l <= 0:
raise Exception('Колода пуста!')
# Выбор индекса карты, которая будет выдана
i = random.randint(0, l - 1)
# Выдача карты с одновременным удалением из колоды
return self._items.pop(i)
@property
def items(self):
return self._items
def __len__(self):
"""
Получение оставшегося числа карт в колоде
:return: integer
"""
return len(self._items)
class Card:
_STR_MAP = {
11: 'Валет',
12: 'Дама',
13: 'Король',
14: 'Туз'
}
_COLOUR_MAP = {
0: 'Черви',
1: 'Пики',
2: 'Бубны',
3: 'Крести'
}
def __init__(self, val, colour):
self.val = val
self.colour = colour
def __str__(self):
val = self._STR_MAP.get(self.val, self.val)
colour = self._COLOUR_MAP[self.colour]
return '{} {}'.format(val, colour)
def __lt__(self, other):
return self.val < other.val
def __gt__(self, other):
return self.val > other.val