Python自定义掷骰子函数中print语句无法执行问题求助
问题分析与修复方案
我帮你看看这段掷骰子代码的问题哈,主要有几个关键bug导致hits数量没法正常打印:
核心问题点
- return语句位置错误:你在函数里先写了
return dice,这会让函数直接结束,后面的print(hits, "hits")根本没机会执行,这是最主要的原因! - hits变量未初始化:代码里直接用
hits +=1,但hits一开始没有被赋值为0,运行时会抛出UnboundLocalError。 - 变量名冲突:函数参数叫
dice,你又在内部定义了dice = [],这会把传入的参数覆盖掉,逻辑肯定乱了。 - 循环变量重复使用:外层循环用了
i,内层循环又用i,虽然Python允许,但容易引发逻辑错误,最好换个变量名。
修复后的代码
import random from random import randint def attributeCheck(dice_input): # 重命名参数避免冲突,顺便纠正函数名拼写(原atribute少了个t) hits = 0 # 初始化hits为0 dice_results = [] # 重命名内部列表,避免和参数冲突 rolls = dice_input.split(",") for roll in rolls: # 换个变量名,避免和内层循环冲突 tmp = roll.split("d") die_count = int(tmp[0]) die_sides = int(tmp[1]) for _ in range(die_count): # 用_代替i,因为这里不需要用到循环变量 currentDie = randint(1, die_sides) dice_results.append(currentDie) if currentDie >=5: hits +=1 print(hits, "hits") # 先打印,再返回结果 return dice_results # 测试调用示例 attributeCheck("2d6,3d10")
关键修改说明
- 调整return位置:把
print放在return前面,确保打印语句能被执行到。 - 初始化hits:一开始就设置
hits = 0,避免未定义的错误。 - 变量名重命名:把参数改成
dice_input,内部结果列表改成dice_results,避免覆盖参数值。 - 循环变量优化:外层循环用
roll代替i,内层用_(表示不需要使用的循环变量),让代码更清晰。 - 拼写修正:把原函数名
atributeCheck改成正确的attributeCheck,更规范。
这样修改后,函数就能正常返回骰子结果数组,同时打印出点数≥5的hits数量啦!
内容的提问来源于stack exchange,提问作者Ghirahim3
相关产品推荐
相关产品推荐

