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

Python计算两骰子掷出和为11的次数:代码返回None问题排查

为什么你的代码输出总是None?问题分析与修复方案

嘿,我来帮你排查下代码里的问题,你的代码每次输出None主要是递归调用的逻辑错误,还有几个计数相关的小问题,咱们一步步拆解:

核心问题拆解

1. 递归调用没有返回结果

在roll_sum函数的else分支里,你调用了roll_sum()但没有把这个递归调用的结果返回出去。当函数执行到这里时,递归完成后当前函数没有任何return语句,Python函数默认会返回None,这就是你看到输出的原因。

2. 计数变量被重复初始化

每次进入roll_sum函数,你都会把count重新赋值为2,这意味着每一层递归都会重置计数,之前的累加完全无效,根本没法统计总次数。

3. 计数逻辑可能不符合预期

你把count初始化为2,每次加2,看起来是把每个骰子的投掷算一次,但通常“掷两骰子的次数”是指每次同时掷两个骰子算1次,所以计数应该从1开始,每次加1会更合理。

修复后的代码

我给你两种修复方案,循环版本更推荐,因为递归在这里没必要,还可能遇到递归深度限制的问题:

方案1:修正递归版本

from random import randint

def die_roll():
    # 合并重复的骰子函数,逻辑完全一样没必要分开写
    return randint(1, 6)

def roll_sum(count=1):  # 把count设为默认参数,初始为1(每次掷一对骰子算1次)
    sum_val = die_roll() + die_roll()
    if sum_val == 11:
        return count
    else:
        # 必须return递归调用的结果,这样计数才能层层返回
        return roll_sum(count + 1)

print("The number of rolls are: ", roll_sum())

方案2:更直观的循环版本(推荐)

from random import randint

def roll_until_eleven():
    count = 0
    while True:
        count += 1
        die1 = randint(1, 6)
        die2 = randint(1, 6)
        if die1 + die2 == 11:
            return count

print("The number of rolls are: ", roll_until_eleven())

关键修复点说明

  • 递归版本:把count作为参数传递,每次递归递增,并且必须返回递归调用的结果,这样最终的计数才能正确传递回来。
  • 循环版本:用while True持续投掷直到和为11,每次循环计数加1,逻辑清晰,也不会有递归深度的问题。
  • 合并了重复的骰子函数,减少冗余代码。

这样修改后,代码就能正确返回你需要的投掷次数啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 07:02:57