为何两种方法计算彩票中奖期望成本会得到不同结果?
问题场景
每张彩票的中奖概率为0.005,可免费获得25张彩票。超出免费额度后,每张彩票需支付9.6美元。当进行到第250次抽奖时,将保证中奖(即若某人购买249张均未中奖,第250张直接中奖)。请计算中奖一次的平均成本。
方法1(最终结果:525.48)
for i in range(26, 250): probability_win = (0.995 ** (i - 1)) * 0.005 # 在第i次抽奖中奖的概率 cost_this_draw = 9.6 * (i - 25) # 此时的总成本 revised_total_cost += probability_win * cost_this_draw return revised_total_cost
方法2(最终结果:1014.5)
max_draws = 250 free_draws = 25 cost_per_draw = 9.6 win_probability = 0.005 cumulative_probability_not_winning = 1.0 expected_total_cost = 0.0 for draw in range(1, max_draws + 1): if draw > free_draws: # 仅在超出免费次数时添加成本 expected_total_cost += cost_per_draw * (1 - cumulative_probability_not_winning) # 更新下次抽奖未中奖的累积概率 cumulative_probability_not_winning *= (1 - win_probability) return expected_total_cost
问题分析与解答
两个方法结果不同的核心原因是两者都存在逻辑错误,具体如下:
方法1的错误:遗漏第250次必中场景
方法1的循环仅覆盖了第26到249次中奖的情况,完全未计算「前249次都未中奖,第250次必中」的场景:
- 该场景的概率为
0.995^249 - 对应的总成本为
9.6*(250-25) = 2160美元 - 这部分期望成本未被加入总和,导致结果偏小。
方法2的错误:成本期望逻辑完全倒置
方法2的核心错误在于对「第draw次彩票的期望成本」的计算逻辑错误:
- 只有当前
draw-1次都未中奖时,才需要购买第draw次彩票,因此第draw次彩票的期望成本应为:成本单价 × 前draw-1次都未中奖的概率 - 但方法2中却用了
9.6*(1 - cumulative_probability_not_winning),其中1 - cumulative_probability_not_winning是前draw-1次至少中过一次奖的概率——这部分用户根本不会购买第draw次彩票,不该计入成本,逻辑完全倒置,导致结果偏大。
正确的计算逻辑
正确的期望成本需覆盖所有中奖场景:
- 第1-25次免费中奖:成本为0,期望贡献为0,可忽略。
- 第26-249次中奖:按方法1的逻辑计算,即每次中奖的概率×对应总成本,累加这部分期望。
- 第250次必中:加上前249次未中奖的概率×对应总成本。
修正后的代码(基于方法1补充第250次场景):
revised_total_cost = 0.0 # 计算第26到249次中奖的期望成本 for i in range(26, 250): probability_win = (0.995 ** (i - 1)) * 0.005 # 第i次中奖的概率 cost_this_draw = 9.6 * (i - 25) # 此时的总成本 revised_total_cost += probability_win * cost_this_draw # 补充第250次必中的期望成本 probability_250_win = 0.995 ** 249 cost_250_draw = 9.6 * (250 - 25) revised_total_cost += probability_250_win * cost_250_draw print(revised_total_cost)
内容的提问来源于stack exchange,提问作者meow
相关产品推荐
相关产品推荐

