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

Python猜骰子游戏:如何正确终止循环并完善输入验证?

猜骰子程序问题修复

你的代码存在三个核心问题,下面是具体问题说明和修正后的完整代码:

问题分析

  • 猜中后不终止:while True无限循环没有退出逻辑,猜中正确数字后没有跳出循环的语句
  • 输入验证失效:validateNumber函数未接收输入参数,依赖全局变量导致逻辑不可靠;且仅在第一次输入无效时重新请求一次,无法持续验证直到输入有效
  • 非数字输入直接退出:当前ValueError异常处理直接终止程序,没有提示用户并允许重新输入

修正后的代码

from random import randint

def validateNumber(num):
    # 直接返回输入是否在1-6范围内的布尔值
    return 1 <= num <= 6

# 提前生成骰子结果,全程不变
game_result = randint(1, 6)

while True:
    try:
        user_guess = int(input("Enter a number between 1-6: "))
        # 循环验证输入,直到用户输入有效数字
        while not validateNumber(user_guess):
            print("Invalid input! Please enter a number between 1 and 6.")
            user_guess = int(input("Enter a number between 1-6: "))
        
        if user_guess == game_result:
            print(f"The result was {game_result}. Your guess was correct!")
            break  # 猜中后跳出循环,结束游戏
        else:
            print(f"The result was {game_result}. Your guess was NOT correct. Please try again")
    except ValueError:
        # 捕获非数字输入,提示后继续循环
        print("That's not a valid number! Please enter an integer between 1-6.")

关键修改说明

  1. 重构验证函数:让validateNumber接收输入参数,直接返回验证结果,避免全局变量依赖,逻辑更简洁可靠
  2. 持续输入验证:用内层循环包裹验证逻辑,确保用户必须输入1-6之间的有效数字才会进入猜数判断
  3. 添加循环退出条件:猜中正确数字后执行break,终止while True循环,结束游戏
  4. 优化异常处理:捕获非数字输入时仅提示错误,不终止程序,让用户可以重新输入

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.16 09:01:00