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

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()