| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- """
- 面向对象
- 枚举 - 一个变量的值只有有限个选择,最适合的类型就是枚举
- 通过枚举我们可以定义符号常量,符号常量优于字面常量
- """
- 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():
- """牌"""
-
- def __init__(self, suite, face):
- self.suite = suite
- self.face = face
- def __repr__(self):
- return self.__str__()
- def __str__(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]}'
- class Poker():
- """扑克"""
-
- def __init__(self):
- self.index = 0
- self.cards = [Card(suite, face)
- for suite in Suite
- for face in range(1, 14)]
- def shuffle(self):
- """洗牌"""
- self.index = 0
- random.shuffle(self.cards)
- def deal(self):
- """发牌"""
- card = self.cards[self.index]
- self.index += 1
- return card
- @property
- def has_more(self):
- """是否有更多的牌"""
- return self.index < len(self.cards)
- class Player():
- """玩家"""
- def __init__(self, name):
- self.name = name
- self.cards = []
- def get_card(self, card):
- """摸牌"""
- self.cards.append(card)
- def arrange(self):
- """整理手上的牌"""
- self.cards.sort(key=lambda card: (card.suite, card.face))
- def main():
- """主函数"""
- poker = Poker()
- poker.shuffle()
- players = [
- Player('东邪'), Player('西毒'),
- Player('南帝'), Player('北丐')
- ]
- while poker.has_more:
- for player in players:
- player.get_card(poker.deal())
- for player in players:
- player.arrange()
- print(player.name, end=': ')
- print(player.cards)
- if __name__ == '__main__':
- main()
|