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

Python骰子统计模拟器递归代码输出值过高问题排查求助

Python骰子统计模拟器问题排查

问题根因

  • 重复统计:checking函数在递归的多个分支被重复调用,同一组骰子点数的和被多次计数,导致总统计值远高于理论值sides ** rolls
  • 递归边界错误:recursiveloop中所有循环的边界都设置为rolls,和骰子面数sides不匹配,生成了大量无效重复的骰子组合
  • 可变对象传递问题:Python中列表为可变对象,递归过程中传递的是列表引用,对列表的修改会同步影响所有上层调用的列表值,导致组合生成逻辑完全混乱
  • 冗余打印干扰:代码中大量无关打印语句也会增加排查难度,调试阶段建议仅保留必要的输出

通用实现方案

你可以改用深度优先遍历直接生成所有合法骰子组合后统计,逻辑清晰且天然支持任意骰子面数、投掷次数的组合:

def count_dice_sum(sides: int, roll_times: int) -> dict:
    result = {}
    # 递归生成所有组合
    def generate(remaining_rolls: int, current_total: int):
        if remaining_rolls == 0:
            result[current_total] = result.get(current_total, 0) + 1
            return
        for point in range(1, sides + 1):
            generate(remaining_rolls - 1, current_total + point)
    generate(roll_times, 0)
    return result

# 测试4d4场景
if __name__ == "__main__":
    sides = 4
    rolls = 4
    stat_res = count_dice_sum(sides, rolls)
    print("各和值出现次数:", stat_res)
    total_count = sum(stat_res.values())
    print("实际统计总组合数:", total_count)
    print("理论总组合数:", sides ** rolls)
    print("统计是否正确:", total_count == sides ** rolls)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 02:15:09