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

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

  • 核心原因有两个:
    1. try块中成功获取user后执行了continue,直接跳过了后续所有逻辑(猜数判断、重玩询问),导致程序一直卡在输入环节;如果try块触发异常(比如输入非数字),user变量根本没被定义,后续的if user == rand_num自然会报错。
    2. 无差别except会捕获所有异常(比如用户按Ctrl+C的中断),容易隐藏其他问题,应该只捕获ValueError(输入无法转为整数的情况)。

修复后的完整代码

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.24 17:27:23