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()
改动说明
- 去掉递归,改用
while True循环结构,所有逻辑在同一层级执行,避免嵌套导致的状态残留。 - 把全局列表
range换成独立变量min_num和max_num,减少可变全局对象带来的意外问题。 - 每次用户输入
s/b后,重新生成新的猜测值,回到循环开头等待反馈,逻辑更直观。 - 增加非法输入提示,提升用户体验。
内容的提问来源于stack exchange,提问作者Sepas
相关产品推荐
相关产品推荐

