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

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")

关键修改说明

  1. 调整return位置:把print放在return前面,确保打印语句能被执行到。
  2. 初始化hits:一开始就设置hits = 0,避免未定义的错误。
  3. 变量名重命名:把参数改成dice_input,内部结果列表改成dice_results,避免覆盖参数值。
  4. 循环变量优化:外层循环用roll代替i,内层用_(表示不需要使用的循环变量),让代码更清晰。
  5. 拼写修正:把原函数名atributeCheck改成正确的attributeCheck,更规范。

这样修改后,函数就能正常返回骰子结果数组,同时打印出点数≥5的hits数量啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:14:13