如何让代码读取函数内变量?游戏角色属性生成代码故障排查
游戏角色属性随机生成代码修复方案
我正在编写一款游戏的角色属性随机生成代码,原代码太长所以想精简行数,但当前这段代码没法正常运行。我是编程新手,试了网上的解决办法都没用,下面是我的代码:
import random as Shadow def StatGen(): import random as Shadow d1= (Shadow.randint(2,6)) d2 = (Shadow.randint(2,6)) d3 = (Shadow.randint(2,6)) d4 = (Shadow.randint(2,6)) stat1 = (d2+d3+d4) stat2 = (d1+d3+d4) stat3 = (d1+d2+d4) stat4 = (d1+d2+d3) StatGen() if (d1 < d2) and (d1 < d3) and (d1 < d4): print ("Your first stat is", stat1) elif (d2 < d1) and (d2 < d3) and (d2 < d4): print ("Your first stat is", stat2) elif (d3 < d1) and (d3 < d2) and (d3 < d4): print ("Your first stat is", stat3) else: print ("Your first stat is", stat4) StatGen() if (d1 < d2) and (d1 < d3) and (d1 < d4): print ("Your second stat is", stat1) elif (d2 < d1) and (d2 < d3) and (d2 < d4): print ("Your second stat is", stat2) elif (d3 < d1) and (d3 < d2) and (d3 < d4): print ("Your second stat is", stat3) else: print ("Your second stat is", stat4)
代码问题分析
- 变量作用域错误:函数
StatGen内部定义的d1、stat1等变量,只能在函数内部使用,外部的if语句无法访问这些变量,会直接报「变量未定义」的错误。 - 重复导入模块:开头已经导入了
random并命名为Shadow,函数内部再次导入属于冗余操作,完全没必要。 - 逻辑冗余低效:手动计算每个
stat的方式太繁琐,你的需求本质是「掷4个2-6的骰子,去掉最小值后求和」,可以用更简洁的方式实现。 - 无效函数调用:两次调用
StatGen()但未保存返回值,生成的随机数值根本无法被外部代码使用。
修复后的精简代码
import random as Shadow def generate_stat(): # 生成4个2到6之间的随机整数 dice = [Shadow.randint(2, 6) for _ in range(4)] # 总和减去最小值,得到去掉最小骰子后的属性值 return sum(dice) - min(dice) # 生成并输出第一个属性 first_stat = generate_stat() print(f"Your first stat is {first_stat}") # 生成并输出第二个属性 second_stat = generate_stat() print(f"Your second stat is {second_stat}")
代码说明
- 用列表推导式一次性生成4个骰子的随机值,替代手动定义
d1到d4的冗余写法。 sum(dice)计算4个骰子的总和,min(dice)找到其中的最小值,两者相减就是你需要的属性值,逻辑清晰且代码简洁。- 函数
generate_stat()直接返回计算好的属性值,外部调用后将结果存入变量,就能正常使用和输出。 - 去掉了重复导入的冗余代码,整体结构更清晰。
内容的提问来源于stack exchange,提问作者Crosshares
相关产品推荐
相关产品推荐

