You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
54 lines
1.7 KiB
54 lines
1.7 KiB
import itertools
|
|
import random
|
|
|
|
# 创建牌组
|
|
suits = ['黑桃', '红桃', '梅花', '方块']
|
|
ranks = ['2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K', 'A']
|
|
deck = list(itertools.product(suits, ranks))
|
|
|
|
# 定义检测牌型的函数
|
|
def check(hand):
|
|
# 检测豹子
|
|
if hand[0][1] == hand[1][1] == hand[2][1]:
|
|
return '豹子'
|
|
# 检测顺金
|
|
sorted_hand = sorted(hand, key=lambda x: ranks.index(x[1]))
|
|
if all(sorted_hand[i][0] == sorted_hand[0][0] for i in range(3)):
|
|
if ranks.index(sorted_hand[2][1]) - ranks.index(sorted_hand[0][1]) == 2:
|
|
return '顺金'
|
|
# 检测金花
|
|
if all(hand[i][0] == hand[0][0] for i in range(3)):
|
|
return '金花'
|
|
# 检测顺子
|
|
if ranks.index(sorted_hand[2][1]) - ranks.index(sorted_hand[0][1]) == 2:
|
|
return '顺子'
|
|
# 检测对子
|
|
if hand[0][1] == hand[1][1] or hand[1][1] == hand[2][1] or hand[0][1] == hand[2][1]:
|
|
return '对子'
|
|
# 检测特殊牌型235
|
|
if sorted([card[1] for card in hand]) == ['2', '3', '5']:
|
|
return '特殊'
|
|
# 如果以上都不是,则为单张
|
|
return '单张'
|
|
|
|
# 模拟游戏
|
|
def game(deck):
|
|
random.shuffle(deck)
|
|
player_hand = random.sample(deck, 3)
|
|
return check(player_hand)
|
|
|
|
# 主函数
|
|
def main():
|
|
# 初始化牌型计数器
|
|
types = {'豹子': 0, '顺金': 0, '金花': 0, '顺子': 0, '对子': 0, '单张': 0, '特殊': 0}
|
|
# 模拟10000次游戏
|
|
for _ in range(10000):
|
|
type = game(deck)
|
|
types[type] += 1
|
|
# 计算并打印概率
|
|
for type, count in types.items():
|
|
print(f"{type}: {count / 10000:.4f}")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|