CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutSign UpSign In
jackfrued

CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!

GitHub Repository: jackfrued/Python-100-Days
Path: blob/master/Day16-20/code/example14.py
Views: 729
1
"""
2
面向对象
3
枚举 - 一个变量的值只有有限个选择,最适合的类型就是枚举
4
通过枚举我们可以定义符号常量,符号常量优于字面常量
5
"""
6
from enum import Enum, unique
7
8
import random
9
10
11
@unique
12
class Suite(Enum):
13
"""花色(枚举)"""
14
SPADE, HEART, CLUB, DIAMOND = range(4)
15
16
def __lt__(self, other):
17
return self.value < other.value
18
19
20
class Card():
21
"""牌"""
22
23
def __init__(self, suite, face):
24
self.suite = suite
25
self.face = face
26
27
def __repr__(self):
28
return self.__str__()
29
30
def __str__(self):
31
suites = ('♠️', '♥️', '♣️', '♦️')
32
faces = ('', 'A', '2', '3', '4', '5', '6',
33
'7', '8', '9', '10', 'J', 'Q', 'K')
34
return f'{suites[self.suite.value]} {faces[self.face]}'
35
36
37
class Poker():
38
"""扑克"""
39
40
def __init__(self):
41
self.index = 0
42
self.cards = [Card(suite, face)
43
for suite in Suite
44
for face in range(1, 14)]
45
46
def shuffle(self):
47
"""洗牌"""
48
self.index = 0
49
random.shuffle(self.cards)
50
51
def deal(self):
52
"""发牌"""
53
card = self.cards[self.index]
54
self.index += 1
55
return card
56
57
@property
58
def has_more(self):
59
"""是否有更多的牌"""
60
return self.index < len(self.cards)
61
62
63
class Player():
64
"""玩家"""
65
66
def __init__(self, name):
67
self.name = name
68
self.cards = []
69
70
def get_card(self, card):
71
"""摸牌"""
72
self.cards.append(card)
73
74
def arrange(self):
75
"""整理手上的牌"""
76
self.cards.sort(key=lambda card: (card.suite, card.face))
77
78
79
def main():
80
"""主函数"""
81
poker = Poker()
82
poker.shuffle()
83
players = [
84
Player('东邪'), Player('西毒'),
85
Player('南帝'), Player('北丐')
86
]
87
while poker.has_more:
88
for player in players:
89
player.get_card(poker.deal())
90
for player in players:
91
player.arrange()
92
print(player.name, end=': ')
93
print(player.cards)
94
95
96
if __name__ == '__main__':
97
main()
98
99