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
相关产品推荐
相关产品推荐

