"""
类和类之间的关系:
- is-a关系(继承)
- has-a关系(关联/聚合/合成)
- use-a关系(依赖)
"""
from enum import Enum, unique
import random
# 枚举类型(定义符号常量的最佳选择,符号常量总是优于字面常量)
@unique
class Suite(Enum):
"""花色"""
SPADE, HEART, CLUB, DIAMOND = range(4)
def __lt__(self, other):
return self.value < other.value
class Card(object):
"""牌"""
def __init__(self, suite, face):
"""初始化方法"""
self.suite = suite
self.face = face
def show(self):
"""显示牌面"""
suites = ['♠️', '♥️', '♣️', '♦️']
faces = [
'', 'A', '2', '3', '4', '5', '6',
'7', '8', '9', '10', 'J', 'Q', 'K'
]
return f'{suites[self.suite.value]} {faces[self.face]}'
def __str__(self):
return self.show()
def __repr__(self):
return self.show()
class Poker(object):
"""扑克"""
def __init__(self):
self.index = 0
self.cards = [Card(suite, face)
for suite in Suite
for face in range(1, 14)]
def shuffle(self):
"""洗牌(随机乱序)"""
random.shuffle(self.cards)
self.index = 0
def deal(self):
"""发牌"""
card = self.cards[self.index]
self.index += 1
return card
@property
def has_more(self):
return self.index < len(self.cards)
# Python解释器搜索一个变量会按照LEGB的顺序进行搜索
# Local --> Embedded --> Global --> Built-in
# 在函数中定义的变量正常情况下属于局部作用域
# 但是可以通过nonlocal或global关键字将其放到嵌套或全局作用域
class Player(object):
"""玩家"""
def __init__(self, name):
self.name = name
self.cards = []
def get_one(self, card):
"""摸一张牌"""
self.cards.append(card)
def sort(self, comp=lambda card: card.face):
"""整理手上的牌"""
self.cards.sort(key=comp)
def main():
"""主函数"""
poker = Poker()
poker.shuffle()
players = [
Player('东邪'), Player('西毒'),
Player('南帝'), Player('北丐')
]
for _ in range(13):
for player in players:
player.get_one(poker.deal())
for player in players:
player.sort(lambda card: (card.suite, card.face))
print(player.name, end=': ')
print(player.cards)
if __name__ == '__main__':
main()
网友评论