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

Python实现抢七局获胜条件概率计算的问题求助

问题:Python递归实现抢七局获胜概率的错误排查

之前我尝试用Excel计算网球抢七局的获胜条件概率,但得到的结果并不准确。现在打算依据某论文第21-22页的递归公式,用Python来实现这一计算,却遇到了棘手的问题:

我编写了两个递归函数,用来计算不同比分下A选手的获胜概率:

def prob_tiebraker_game_A(Pa, Pb, a, b):
    if a == 7 and b >= 0 and b <=5:
        return 1
    elif b == 7 and a >= 0 and a <=5:
        return 0
    elif a == 6 and b == 6:
        return (Pa*(1-Pb))/(Pa*(1-Pb) + (1-Pa)*Pb)
    elif (a+b) % 2 ==0:
        return Pa*prob_tiebraker_game_B(Pa, Pb, a+1, b) + (1-Pa)*prob_tiebraker_game_B(Pa, Pb, a,b+1)
    elif (a+b) % 2 !=0:
        return Pa*prob_tiebraker_game_A(Pa, Pb, a+1, b) + (1-Pa)*prob_tiebraker_game_A(Pa, Pb, a,b+1)

def prob_tiebraker_game_B(Pa, Pb, a, b):
    if b == 7 and a >= 0 and a <=5:
        return 1
    elif a == 7 and b >= 0 and b <=5:
        return 0
    elif a == 6 and b == 6:
        return (Pb*(1-Pa))/(Pb*(1-Pa) + (1-Pb)*Pa)
    elif (a+b) % 2 ==0:
        return Pb*prob_tiebraker_game_A(Pa, Pb, a+1, b) + (1-Pb) * prob_tiebraker_game_A(Pa, Pb, a,b+1)
    elif (a+b) % 2 !=0:
        return Pb*prob_tiebraker_game_B(Pa, Pb, a+1, b) + (1-Pb) * prob_tiebraker_game_B(Pa, Pb, a,b+1)

测试时发现,当设置Pa=0.62、Pb=0.6时,只有比分(0,0)、(6,6)以及所有一方拿到7分且另一方分数≤5的情况结果是正确的,其余(a,b)组合的计算结果都存在错误。我尝试修改过函数里的条件判断逻辑,但问题依然没有解决,希望能得到技术上的帮助,找出递归逻辑里的问题所在。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 06:43:41