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

Python猜数字游戏while循环条件为false仍被执行问题求助

问题成因

  • 逻辑混用错误:同时使用了while循环和递归两种重复执行逻辑,二者相互冲突。每次在循环内调用guess(lives-1)时,会进入新的函数递归层,上层函数的lives和guess_number变量不会被修改,递归层退出后,上层的while循环仍会按旧的变量值继续执行,导致lives为0的判断无法终止上层循环。
  • 循环内未更新输入值:guess_number = int(input(...))写在了while循环外部,进入循环后永远不会重新读取用户的新输入,也不会更新lives变量的值,导致循环判断条件永远不会触发false退出。
  • 猜对分支逻辑不可达:while循环的准入条件是guess_number!= number,因此循环内部的else: print(f"You got it...")分支永远不会被执行。

修复方案

方案1:改为纯循环实现(推荐)

去掉递归逻辑,所有重复执行逻辑用循环实现,代码如下:

import random
print("Welcome to the Number Guessing Game!")
number = random.randint(1,100)
print("I'm thinking of a number between 1 and 100.")
# 调试用,正式运行可删除下一行
# print(number)

def set_lives():
    level = input("Choose a difficulty.Type 'easy' or 'hard': ")
    return 10 if level == "easy" else 5

def guess(lives):
    while lives > 0:
        guess_number = int(input("Make a guess: "))
        if guess_number == number:
            print(f"You got it! The answer was {number}")
            return
        elif guess_number > number:
            print("Too High")
        else:
            print("Too Low")
        lives -= 1
        if lives > 0:
            print(f"You have {lives} attempts remaining to guess the number")
        else:
            print("You are out of moves.You loose")
            print(f"The correct number is {number}")

guess(set_lives())

方案2:改为纯递归实现

如果要保留递归逻辑,就删除冗余的while循环:

import random
print("Welcome to the Number Guessing Game!")
number = random.randint(1,100)
print("I'm thinking of a number between 1 and 100.")
# 调试用,正式运行可删除下一行
# print(number)

def set_lives():
    level = input("Choose a difficulty.Type 'easy' or 'hard': ")
    return 10 if level == "easy" else 5

def guess(lives):
    if lives <= 0:
        print("You are out of moves.You loose")
        print(f"The correct number is {number}")
        return
    guess_number = int(input("Make a guess: "))
    if guess_number == number:
        print(f"You got it! The answer was {number}")
        return
    elif guess_number > number:
        print("Too High")
    else:
        print("Too Low")
    print(f"You have {lives-1} attempts remaining to guess the number")
    guess(lives-1)

guess(set_lives())

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 22:06:01