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.")
关键修改说明
- 重构验证函数:让
validateNumber接收输入参数,直接返回验证结果,避免全局变量依赖,逻辑更简洁可靠 - 持续输入验证:用内层循环包裹验证逻辑,确保用户必须输入1-6之间的有效数字才会进入猜数判断
- 添加循环退出条件:猜中正确数字后执行
break,终止while True循环,结束游戏 - 优化异常处理:捕获非数字输入时仅提示错误,不终止程序,让用户可以重新输入
内容的提问来源于stack exchange,提问作者Andrea
相关产品推荐
相关产品推荐

