Python骰子游戏/score命令无输出问题的修复方案
问题排查
- 变量作用域问题:每次调用
rolldie()函数时,roll1和roll2都会被重新初始化为空字符串,之前掷骰子的结果不会被保留,输入/score时自然拿不到有效数值。 - 变量命名错误:处理
/roll2命令时,生成的随机数存在了roll_2变量里,但后续计算分数用的是roll2,导致roll2始终是空字符串。 - 条件分支逻辑错误:
/score的elif是和第二个if(判断/roll2)绑定的,只有当输入不是/roll2才会进入这个分支,但如果先输入/roll1再输入/score,这个分支根本不会触发。 - 类型不匹配:
roll1和roll2初始化为字符串,就算有数值,字符串相加也会出问题,应该初始化为整数0。
修复方案
把分数变量提到函数外部作为全局变量,修正变量命名与条件分支结构,统一变量类型:
# 授权验证(密码为任意整数) while True: try: pass_word = int(input("Please enter the password: ")) except ValueError: print("Sorry, I didn't understand that.") continue else: break # 游戏部分 import random # 全局变量存储两次掷骰结果,初始为0 roll1 = 0 roll2 = 0 def rolldie(): global roll1, roll2 # 声明使用全局变量 inputChoice = input("Enter Choice: ") if inputChoice == "/roll1": roll1 = random.randint(1,6) print(f"Nice roll! You rolled a {roll1}!") elif inputChoice == "/roll2": roll2 = random.randint(1,6) print(f"Nice roll! You rolled a {roll2}!") elif inputChoice == "/score": total = roll1 + roll2 print(f"Your total score is: {total}") else: print("Invalid command! Use /roll1, /roll2 or /score.") rolldie() # 循环调用函数保持游戏运行 rolldie()
修复说明
- 将
roll1和roll2定义为全局变量,确保每次掷骰的结果能被保留,不会被函数每次调用重置。 - 修正
/roll2的变量命名,把roll_2改成roll2,保证赋值和后续计算用的是同一个变量。 - 把所有命令判断改成
elif链式结构,确保每个输入只会进入一个分支,逻辑更清晰。 - 变量初始化为整数0,避免字符串相加的类型错误,同时未掷骰时分数显示为0,更合理。
- 添加无效命令提示,提升用户体验。
内容的提问来源于stack exchange,提问作者fps
相关产品推荐
相关产品推荐

