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

基于Excel文件计算彩票中奖概率的Python代码修正需求

问题分析与代码修正

核心计算逻辑

中奖概率的正确推导:

  • 总共有 C(25,15) 种开奖组合(从25个数字中选15个的组合数),计算结果为 3268760
  • 对于选了 k 个数字的单票,中奖条件是开奖的15个数字完全包含在这 k 个数字中,符合条件的开奖组合数为 C(k,15)
  • 最终概率公式:概率 = C(k,15) / C(25,15),转换为分数形式后与官方给出的结果完全匹配

验证官方数据

代入不同 k 值验证:

  • k=15:C(15,15)/3268760 = 1/3268760 → 匹配官方
  • k=16:C(16,15)/3268760 = 16/3268760 = 1/204298 → 匹配官方
  • k=17:C(17,15)/3268760 = 136/3268760 = 1/24035 → 匹配官方
  • 其余 k 值计算结果均与官方数据一致

Python代码实现

使用 math.comb(Python 3.10+ 支持)计算组合数,结合 pandas 读取并处理Excel文件:

import math
import pandas as pd

# 预计算总开奖组合数,避免重复计算
TOTAL_COMBINATIONS = math.comb(25, 15)

def get_win_probability(k):
    if not (15 <= k <= 20):
        return "无效列数"
    valid_combs = math.comb(k, 15)
    # 转换为官方格式的分数字符串
    return f"1/{round(TOTAL_COMBINATIONS / valid_combs)}"

# 读取Excel文件(假设无表头,根据实际情况调整header参数)
df = pd.read_excel("your_lottery_data.xlsx", header=None)

# 遍历每行计算概率
output = []
for row_idx, row in df.iterrows():
    # 过滤空值和非1-25的无效数字
    valid_nums = [num for num in row if pd.notna(num) and 1 <= num <= 25]
    num_count = len(valid_nums)
    prob = get_win_probability(num_count)
    output.append({
        "行号": row_idx + 1,
        "有效数字数量": num_count,
        "中奖概率": prob
    })

# 打印结果
for item in output:
    print(f"第{item['行号']}行: {item['有效数字数量']}个数字,中奖概率{item['中奖概率']}")

# 保存结果到新Excel
result_df = pd.DataFrame(output)
result_df.to_excel("lottery_probability_results.xlsx", index=False)

代码说明

  • 预计算总组合数提升运行效率
  • 过滤无效数字确保统计的 k 值准确
  • 返回的概率格式与官方完全匹配
  • 支持将结果保存为Excel文件,方便批量查看

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 18:15:13