example14.py 2.1 KB

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