1. def phazed_phase_type(phase):
    2. # Implement this function.
    3. # 用字典定义每张牌的数值和对应的花色
    4. value_dict = {'A': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9, '0': 10, 'J': 11, 'Q': 12,
    5. 'K': 13}
    6. suit_dict = {'S': 'black', 'H': 'red', 'D': 'red', 'C': 'black'}
    7. phase_type = []
    8. result = []
    9. for group in phase:
    10. # 获取每张牌的值,并转换成整数类型
    11. value_list = [_[0] for _ in group]
    12. int_value_list = [value_dict[i] for i in value_list]
    13. # 获取每张牌的花色,并转成红色或者黑色
    14. suit_list = [_[1] for _ in group]
    15. color_list = [suit_dict[i] for i in suit_list]
    16. # 判断是否为第一个组合
    17. def is_one():
    18. if len(group) == 3:
    19. # 将牌中的万能牌去掉后,如果牌面值只有一种,则符合第一中组合
    20. s1 = list(set(value_list) - set('A'))
    21. if len(s1) == 1:
    22. result.append(1)
    23. # 判断是否为第二个组合
    24. def is_two():
    25. if len(group) == 7:
    26. # 从该组牌中去除万能牌
    27. for i in range(len(value_list) - 1, 0, -1):
    28. if value_list[i] == 'A':
    29. suit_list.pop(i)
    30. # 去掉万能牌后,如果花色只有一种,则符合第二种组合
    31. s2 = set(suit_list)
    32. if len(s2) == 1:
    33. result.append(2)
    34. # 判断是否为第三个组合
    35. def is_three():
    36. if sum(int_value_list) == 34:
    37. result.append(3)
    38. # 判断该牌组是否排序
    39. def is_sorted():
    40. a_index = [] # 代表牌面为A所在的位置
    41. not_a = [] # 代表牌面不为A所在的位置
    42. for index, value in enumerate(int_value_list):
    43. if value != 1:
    44. not_a.append(index)
    45. else:
    46. a_index.append(index)
    47. # 找到第一个不是A牌的值,将A的值根据其位置进行转换为相应的牌
    48. for i in a_index:
    49. color_list[i] = color_list[not_a[0]] # 将A牌的颜色换成一个不是A牌的颜色
    50. if i < not_a[0]:
    51. # 如果A牌在第一个不是A牌的前面,则进行减数处理
    52. a_value = int_value_list[not_a[0]] - (not_a[0] - i)
    53. # 如果该牌面值小于0,则直接退出
    54. if a_value > 0:
    55. int_value_list[i] = a_value
    56. else:
    57. return False
    58. else:
    59. # 如果A牌在第一个不是A牌的后面,则进行加数处理
    60. a_value = int_value_list[not_a[0]] + (i - not_a[0])
    61. # 如果该牌面值大于13,则直接退出
    62. if a_value < 13:
    63. int_value_list[i] = a_value
    64. else:
    65. return False
    66. # 判断替换A牌后的牌是否按照顺序排列
    67. for j in range(1, 4):
    68. if int_value_list[j] - int_value_list[j - 1] != 1:
    69. return False
    70. else:
    71. return True
    72. # 判断是否为第四个组合
    73. def is_four():
    74. if len(group) == 4:
    75. # 将牌中的万能牌去掉后,如果牌面值只有一种,则符合第三种组合
    76. s3 = list(set(value_list) - set('A'))
    77. if len(s3) == 1:
    78. result.append(4)
    79. # 判断是否为第五个组合
    80. def is_five():
    81. if len(group) == 8:
    82. if is_sorted():
    83. result.append(5)
    84. # 判断是否为第六个组合
    85. def is_six():
    86. red_sum = 0 # 记录红色牌的数值综合
    87. black_sum = 0 # 记录黑色牌的数值综合
    88. for i in range(len(group)):
    89. if color_list[i] == 'red':
    90. red_sum += int_value_list[i]
    91. else:
    92. black_sum += int_value_list[i]
    93. if red_sum == 34 or black_sum == 34:
    94. result.append(6)
    95. # 判断是否为第七个组合
    96. def is_seven():
    97. if len(group) == 4:
    98. if is_sorted():
    99. if len(set(color_list)) == 1:
    100. result.append(7)
    101. # 判断是否该组牌中有两个以上"natural" cards
    102. if value_list.count('A') <= len(value_list) - 2:
    103. is_one()
    104. is_two()
    105. is_four()
    106. is_five()
    107. is_seven()
    108. # 判断是否符合第六、七组合
    109. is_three()
    110. is_six()
    111. if result.count(1) >= 2:
    112. phase_type.append(1)
    113. if result.count(2) >= 1:
    114. phase_type.append(2)
    115. if result.count(3) >= 2:
    116. phase_type.append(3)
    117. if result.count(4) >= 2:
    118. phase_type.append(4)
    119. if result.count(5) >= 1:
    120. phase_type.append(5)
    121. if result.count(6) >= 2:
    122. phase_type.append(6)
    123. if result.count(7) >= 1 and result.count(4) >= 1:
    124. phase_type.append(7)
    125. return phase_type
    126. if __name__ == '__main__':
    127. # Example calls to the function.
    128. print(phazed_phase_type([['2C', '2S', '2H'], ['7H', '7C', 'AH']]))
    129. print(phazed_phase_type([['2C', '2C', '4C', 'KC', '9C', 'AH', 'JC']]))
    130. print(phazed_phase_type([['2C', 'KH', 'QS', '7H'],
    131. ['3H', '7S', '0D', 'KD', 'AD']]))
    132. print(phazed_phase_type([['4H', '4S', 'AC', '4C'],
    133. ['7H', '7C', 'AH', 'AC']]))
    134. print(phazed_phase_type([['4H', '5S', 'AC', '7C',
    135. '8H', 'AH', '0S', 'JC']]))
    136. print(phazed_phase_type([['2C', 'KC', 'QS', '7C'],
    137. ['3H', '7H', '0D', 'KD', 'AD']]))
    138. print(phazed_phase_type([['4H', '5D', 'AC', '7H'],
    139. ['7H', '7C', 'AH', 'AS']]))
    140. print(phazed_phase_type([['4H', '5D', '7C', 'AC'], ['AC', 'AS', 'AS']]))