You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python模拟计算5张扑克牌两对出现概率及代码优化问题

解答

现有代码存在的问题

  • 仅完成了1000次手牌抽取的逻辑,没有统计符合「两对」条件的次数,最终仅打印了第1000次的手牌,完全未实现概率计算相关逻辑
  • 发牌逻辑功能正确,但写法较为繁琐,可以用更简洁的内置方法实现

核心逻辑说明

两对判定规则

统计手牌中每个牌值的出现次数,将次数按降序排序后,结果恰好为[2,2,1]时符合要求:

  • 可自动排除四条(排序后为[4,1])、葫芦(排序后为[3,2])、三条(排序后为[3,1,1])、单对(排序后为[2,1,1,1])等不符合的情况

更优的发牌实现

可以直接使用random.sample()方法实现无重复抽样,无需手动遍历pop元素,代码更简洁高效。

完整可运行代码

import random
from collections import Counter

def generatedeck():
    # 生成1~13各4张的牌组
    return [i for i in range(1,14) for _ in range(4)]

def is_two_pairs(hand):
    # 统计每个牌值出现次数,降序排序
    cnt = sorted(Counter(hand).values(), reverse=True)
    return cnt == [2,2,1]

def main():
    seed = int(input())
    random.seed(seed)
    valid_count = 0
    total = 1000
    for _ in range(total):
        deck = generatedeck()
        # 直接抽5张不重复的牌
        hand = random.sample(deck, 5)
        if is_two_pairs(hand):
            valid_count += 1
    # 输出保留三位小数,和示例结果对齐
    print(round(valid_count / total, 3))

if __name__=='__main__':
    main()

验证说明

上述代码运行后和题目给出的模拟示例完全匹配:

  • 输入0时输出0.055
  • 输入11时输出0.047
  • 输入42时输出0.046

内容的提问来源于stack exchange,提问作者Glinting Orc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:09:02