Python猜数字游戏陷入while循环无法正常运行的问题排查
猜数字游戏循环问题修复
问题根源
- 死循环核心原因:
checked_user_nummer仅在循环启动前赋值一次,后续循环内调用nummer_eingabe()获取新输入后,未将返回值重新赋值给该变量,导致循环始终基于第一次输入的数值判断,永远无法匹配随机数。 - 额外问题:
- 计数器
counter在循环内才开始递增,漏掉了第一次猜测的计数。 - 猜对的分支写在
while循环内部,但循环条件是checked_user_nummer != randomnummer,该分支永远不会被执行。 - 输入验证提示存在拼写错误:
"Pleae"应为"Please"。
- 计数器
修复后的完整代码
from random import randint # 生成1-50的随机数 randomnummer = randint(1, 50) # print(randomnummer) # 调试用,可注释 # 获取并验证用户输入的数字 def nummer_eingabe(): try: usernummer = int(input("Please enter a number between 1 and 50: ")) if 1 <= usernummer <= 50: return usernummer else: print("Please enter a valid number.") return nummer_eingabe() except ValueError: # 处理非数字输入的异常,避免程序崩溃 print("Please enter a valid integer.") return nummer_eingabe() counter = 0 checked_user_nummer = nummer_eingabe() while checked_user_nummer != randomnummer: counter += 1 if checked_user_nummer > randomnummer: print("You need to guess lower. Try again :)") else: print("You need to guess higher. Try again :)") # 关键:将新输入的数值赋值给判断变量,更新循环条件 checked_user_nummer = nummer_eingabe() # 循环退出即代表猜对数字,统计总尝试次数(包含最后一次正确猜测) counter += 1 print(f"Nice! You needed {counter} tries to find the right number") # 防止控制台直接关闭 input()
核心修改说明
- 更新判断变量:每次循环末尾将
nummer_eingabe()的返回值赋值给checked_user_nummer,确保循环判断使用最新的用户输入,打破死循环。 - 修正计数逻辑:循环外初始化计数器,猜对后额外加1,保证第一次猜测和最后一次正确猜测都被计入总次数。
- 增强输入健壮性:添加
try-except捕获非数字输入的异常,避免程序因输入非整数崩溃;修正拼写错误。 - 简化循环结构:移除多余的
continue语句,循环会自动进入下一轮判断;将猜对的逻辑移至循环外,因为循环退出的唯一条件就是匹配到随机数。
内容的提问来源于stack exchange,提问作者Flippi
相关产品推荐
相关产品推荐

