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

如何优化该彩票模拟程序?

如何优化该彩票模拟程序?

我明白你现在的困境——明明电脑配置不差,但程序就是跑不完一次模拟。咱们来一步步找出问题根源,然后优化程序,让它既能符合真实彩票规则,又能高效运行。

先说说你当前代码的核心问题

  1. 号码重复不符合真实规则:真实彩票的6个号码是1-49范围内不重复的,但你用randint生成的号码可能出现重复(比如Anums里可能有两个5)。这会导致两个大问题:一是匹配逻辑完全失真,二是“全中”的概率变得极端低下,甚至可能让程序几乎永远跑不完。
  2. 低效且错误的匹配统计:你用双重循环统计匹配次数,不仅速度慢,还会因为重复号码统计出错误的hits数(比如Anums有两个5,Bnums有一个5,代码会算2次匹配,但实际应该是1次)。
  3. 不必要的控制台拖慢速度:每次循环都打印Bnums,控制台输出的速度远慢于代码计算,这是拖慢程序的重要原因。

优化后的完整代码

from random import sample

# 生成初始的6个不重复目标号码
Anums = sample(range(1, 50), 6)
print(f"目标号码: {Anums}")

tries = 0
three_matches = 0
four_matches = 0
five_matches = 0

while True:
    # 生成新的一组不重复号码
    Bnums = sample(range(1, 50), 6)
    tries += 1
    
    # 用集合交集快速统计匹配数量,高效又准确
    common_numbers = set(Anums) & set(Bnums)
    hits = len(common_numbers)
    
    # 统计不同匹配次数的情况
    if hits == 3:
        three_matches += 1
    elif hits == 4:
        four_matches += 1
    elif hits == 5:
        five_matches += 1
    elif hits == 6:
        break

# 输出最终统计结果
print(f"总共尝试了 {tries} 次")
print(f"匹配3个号码的次数: {three_matches}")
print(f"匹配4个号码的次数: {four_matches}")
print(f"匹配5个号码的次数: {five_matches}")
print(f"最终命中的号码: {Bnums}")

关键优化点说明

  • 用sample生成不重复号码:random.sample(range(1,50),6)会直接从1-49里随机选出6个不重复的数字,完美符合真实彩票规则,也避免了重复号码带来的匹配逻辑错误。
  • 集合操作统计匹配数:把两组号码转成集合后,用交集操作&就能快速得到共同元素,再取长度就是真实的匹配数量,比双重循环效率高得多,结果也绝对准确。
  • 去掉冗余输出:只在开头打印目标号码,结尾打印统计结果,避免了每次循环都输出的性能损耗。

为什么现在能正常运行?

真实彩票中,全中6个号码的概率大约是1/13983816,所以程序确实需要运行几十万到上百万次循环,但你的电脑完全能处理这个量级的计算——之前的问题主要是重复号码导致概率异常,加上控制台输出拖慢了速度,优化后就能正常完成模拟了。

备注:内容来源于stack exchange,提问作者SomeOrdinaryCoder

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.14 12:22:57