CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
CoCalc provides the best real-time collaborative environment for Jupyter Notebooks, LaTeX documents, and SageMath, scalable from individual users to large groups and classes!
Path: blob/master/Day16-20/code/example14.py
Views: 729
"""1面向对象2枚举 - 一个变量的值只有有限个选择,最适合的类型就是枚举3通过枚举我们可以定义符号常量,符号常量优于字面常量4"""5from enum import Enum, unique67import random8910@unique11class Suite(Enum):12"""花色(枚举)"""13SPADE, HEART, CLUB, DIAMOND = range(4)1415def __lt__(self, other):16return self.value < other.value171819class Card():20"""牌"""2122def __init__(self, suite, face):23self.suite = suite24self.face = face2526def __repr__(self):27return self.__str__()2829def __str__(self):30suites = ('♠️', '♥️', '♣️', '♦️')31faces = ('', 'A', '2', '3', '4', '5', '6',32'7', '8', '9', '10', 'J', 'Q', 'K')33return f'{suites[self.suite.value]} {faces[self.face]}'343536class Poker():37"""扑克"""3839def __init__(self):40self.index = 041self.cards = [Card(suite, face)42for suite in Suite43for face in range(1, 14)]4445def shuffle(self):46"""洗牌"""47self.index = 048random.shuffle(self.cards)4950def deal(self):51"""发牌"""52card = self.cards[self.index]53self.index += 154return card5556@property57def has_more(self):58"""是否有更多的牌"""59return self.index < len(self.cards)606162class Player():63"""玩家"""6465def __init__(self, name):66self.name = name67self.cards = []6869def get_card(self, card):70"""摸牌"""71self.cards.append(card)7273def arrange(self):74"""整理手上的牌"""75self.cards.sort(key=lambda card: (card.suite, card.face))767778def main():79"""主函数"""80poker = Poker()81poker.shuffle()82players = [83Player('东邪'), Player('西毒'),84Player('南帝'), Player('北丐')85]86while poker.has_more:87for player in players:88player.get_card(poker.deal())89for player in players:90player.arrange()91print(player.name, end=': ')92print(player.cards)939495if __name__ == '__main__':96main()979899