Python掷骰子游戏问题:while循环无法终止+NameError异常求助
Python掷骰子游戏问题排查与修复
问题1:while循环无法终止
- 你使用
while True作为循环条件,但代码里通过game_is_on变量控制游戏开关,两者完全没有关联。不管用户选择继续还是退出,while True都会让循环无限执行。 - 解决方法:将循环条件改为
while game_is_on,这样当game_is_on被设为False时,循环会自动终止。
问题2:NameError: name 'user' is not defined
- 核心原因有两个:
- try块中成功获取
user后执行了continue,直接跳过了后续所有逻辑(猜数判断、重玩询问),导致程序一直卡在输入环节;如果try块触发异常(比如输入非数字),user变量根本没被定义,后续的if user == rand_num自然会报错。 - 无差别
except会捕获所有异常(比如用户按Ctrl+C的中断),容易隐藏其他问题,应该只捕获ValueError(输入无法转为整数的情况)。
- try块中成功获取
修复后的完整代码
import random game_is_on = True while game_is_on: rand_num = random.randint(1, 6) # 每次游戏重新生成随机数 try: user = int(input("What's your choice : ")) except ValueError: print("Please Enter a number between 1-6") continue # 输入错误时重新循环,让用户再次输入 if user < 1 or user > 6: print("Please Enter a number between 1-6") continue if user == rand_num: print("\t congrats ! \n You guessed it right 🎊") else: print(f"Sorry! your guess is incorrect🥺. The number was {rand_num}") replay = input("Do you want to play again (Yes/No): ").lower() if replay != 'yes': print("Thanks for playing this game") game_is_on = False
额外优化说明
- 将
rand_num移到循环内部,确保每次重玩都会生成新的随机数(原代码每次重玩都是同一个数)。 - 增加了输入范围判断,避免用户输入合法整数但超出1-6范围的情况。
- 重玩判断逻辑简化,直接判断输入是否不等于
yes,同时统一转小写,兼容不同大小写的输入(如Yes/YEs)。
内容的提问来源于stack exchange,提问作者codeRunner
相关产品推荐
相关产品推荐

