example14.py 2.1 KB

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