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

抽5张牌获得three of a kind(三条)的概率计算及代码问题排查

你的代码存在以下核心问题
  • 未在循环内初始化three1/three2/three3变量,不仅会触发变量未定义报错,跨循环累计的计数也会导致判断完全失真
  • 计数逻辑错误:any(hand[0][0] == x[0] for x in hand)的判断永远为真(元素会和自身比较),且单次匹配就加1的逻辑完全无法统计同面值的牌数
  • 未排除四条、葫芦(三条+一对)的情况,会导致计算出的概率高于三条的真实概率
  • 冗余操作:shuffle(deck)后再用sample抽牌完全多余,sample本身就会随机抽取不重复的元素,不需要提前洗牌
修改后的完整代码
from random import sample
from itertools import product
from collections import Counter

# 生成牌库
suits = ["s","d","h","c"]
values = ["1","2","3","4","5","6","7","8","9","10","11","12","13"]
deck = list(product(values, suits))
sim = 100000

three_of_a_kind = 0
for i in range(sim):
    # 随机抽取5张手牌
    hand = sample(deck, 5)
    # 统计每个面值出现的次数,按降序排序
    value_counts = sorted(Counter(card[0] for card in hand).values(), reverse=True)
    # 判定三条标准:恰好一个面值出现3次,剩余两个面值各出现1次,排除葫芦、四条的情况
    if value_counts == [3, 1, 1]:
        three_of_a_kind += 1

prob_three = three_of_a_kind / sim
print(prob_three)
逻辑说明
  • 用collections.Counter统计手牌面值的出现次数,避免手动计数的逻辑错误
  • 10万次模拟得到的概率约为2.1%,和官方公布的德州扑克三条出现概率(约2.11%)吻合,结果准确

内容的提问来源于stack exchange,提问作者The anime kid

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 17:06:04