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

5张扑克牌同花概率模拟Python代码运行结果异常排查

代码逻辑问题

  • 最核心的错误是花色计数变量没有在每次模拟前重置:hearts、spades、diamonds、clubs四个计数变量的初始化放在了模拟循环的最外层,每次模拟完一手牌后,四个变量的计数不会清零,会一直累计到后续的模拟中。比如第一次模拟的手牌有2张红桃、1张黑桃、1张方块、1张梅花,四个变量的值分别为2、1、1、1,第二次模拟再叠加新的5张牌的花色计数,总和会变成10,永远不可能出现某一个花色计数等于5的情况,最终统计到的同花次数会远低于真实值。
  • 次要问题:循环变量i重复定义,外层模拟循环、取手牌循环、判断花色循环都用了同一个变量名i,虽然Python语法允许,但可读性差,容易引发潜在逻辑错误。
  • 额外说明:你提到的理论值0.03是错误的,5张牌随机抽中同花(含同花顺)的真实概率约为0.00198(即0.198%),排除同花顺后约为0.00196,远低于3%。

修正后的代码

from random import *

# 生成牌组
deck = []
for suit in range(4):
    for value in range(13):
        deck.append(100 * suit + value)

sim = 100000
flush = 0

for _ in range(sim):
    # 每次模拟前重置花色计数
    hearts = 0
    spades = 0
    diamonds = 0
    clubs = 0
    # 生成手牌
    shuffle(deck)
    hand = deck[:5]
    # 判断同花
    for card in hand:
        if card < 100:
            hearts += 1
        elif card < 200:
            spades += 1
        elif card < 300:
            diamonds += 1
        else:
            clubs += 1
    if hearts == 5 or spades == 5 or diamonds == 5 or clubs == 5:
        flush += 1

# 输出概率
print(flush / sim)

运行修正后的代码,得到的结果会在0.002左右浮动,和真实理论值一致。

内容的提问来源于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.30 10:45:03