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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 18:40:49