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

Python中While循环feedback!='yes'判断未按预期工作问题求助

问题排查与修复方案

核心问题原因

  • 递归调用导致循环嵌套残留:当输入s或b时,你直接递归调用get_user_feedback,此时新的函数实例开始执行,但原来的while循环还停留在之前的层级,手里的feedback值还是旧的(比如s)。哪怕你在新的递归层级里输入yes结束,回到原来的层级时,while feedback != 'yes'的条件依然成立,会再次触发递归,导致程序继续猜数。
  • while循环未更新状态也无终止逻辑:在while循环内部,处理完s/b的逻辑后,既没有重新获取用户输入更新feedback,也没有用break跳出当前循环,旧的feedback一直满足循环条件,会无限重复执行递归调用。

修复后的代码

把递归逻辑改成循环结构,避免层级嵌套的状态残留问题:

import random

# 用独立变量存范围,比全局列表更清晰
min_num = 0
max_num = 10

def do_guess(minimum, maximum):
    print('min is:', minimum, ' max is: ', maximum)
    return random.randint(minimum, maximum)

def get_user_feedback():
    guess = do_guess(min_num, max_num)
    while True:
        feedback = input(f'Is {guess} correct?')
        print(feedback)
        if feedback == 'yes':
            print('Wow! I did it!')
            break
        elif feedback == 's':
            global max_num
            max_num = guess
            guess = do_guess(min_num, max_num)
        elif feedback == 'b':
            global min_num
            min_num = guess
            guess = do_guess(min_num, max_num)
        else:
            print('请输入yes/s/b')

get_user_feedback()

改动说明

  1. 去掉递归,改用while True循环结构,所有逻辑在同一层级执行,避免嵌套导致的状态残留。
  2. 把全局列表range换成独立变量min_num和max_num,减少可变全局对象带来的意外问题。
  3. 每次用户输入s/b后,重新生成新的猜测值,回到循环开头等待反馈,逻辑更直观。
  4. 增加非法输入提示,提升用户体验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 15:25:50