Python递归函数首次返回True,后续递归调用返回None问题排查
递归函数返回None的修复方案
你的问题出在递归调用时没有返回函数的执行结果:当你在else分支里调用login(log)时,只是执行了这个函数,但没把它的返回值传递给上层调用。所以哪怕最内层的递归返回了True,这个值也不会传递到最初的调用,导致最终flag拿到的是None。
修复后的代码
def login(log = 1): # 注意:原代码里na变量未定义,需提前定义(比如na = "玩家") con = input(f"{na} are you Ready for the game Yes/NO ") if con.lower() in {"yes", "y"}: print("welcome to The Game") return True elif log == 3: print("retry after long time") # 明确返回值,避免默认返回None,可根据需求改为其他值 return False else: print("Retry again") log = log + 1 # 关键修改:加上return,让递归的返回值逐层传递到上层调用 return login(log) flag = login() print(f"flag = {flag}")
核心修改说明
- 在递归调用前添加
return,确保内层函数的返回值能传递到最初的调用栈,最终让flag拿到正确结果。 - 简化输入判断逻辑:用
con.lower() in {"yes", "y"}替代多个or判断,代码更简洁易读。 - 给
log == 3的分支补充明确返回值,避免函数默认返回None,让逻辑更严谨。
内容的提问来源于stack exchange,提问作者vishal
相关产品推荐
相关产品推荐

