递归函数返回自己而不被要求

时间:2015-07-26 16:27:30

标签: python recursion

我在终端中有一个提示,在没有被要求的情况下调用自己。有问题的行为是,如果它被输入像['artist','art','dogs']这样的名字,并且匹配匹配其中1个,当它到达btn1时,它会要求你确认“是狗好吗?“两次。它总是要求两次,然后正确地返回'狗'

elif len(matches) == 1:

我一直坚持下去,因为我看到它,hostfunc尝试返回提示,看到它没有答案,并要求你“选择......”,它会调用带有答案的_prompt。 _prompt看到它有答案,获得匹配,自def hostfunc(names): def _prompt(answer=None): if answer == None: answer = gather("Pick from {names}...if you want more than 1, separate like \"name1, name2\"".format(names=names)) _prompt(answer=answer) matches = check_for_answer_matches(names, answer) matches_string = process_matches(matches) if len(matches) == 0: answer = gather("That string didn't match any of {names}, please try again".format(names=names)) _prompt(answer=answer) elif len(matches) == 1: answer = gather("Is {matches_string} OK? ('y' or 'n' to restart)".format(matches_string=matches_string)) if answer == 'y': return matches elif answer == 'n': return _prompt() return matches elif len(matches) > 1: answer = gather("That string matched {matches_string}, is that OK? ('y' or 'n' to restart)".format(matches_string=matches_string)) if answer == 'y': return matches elif answer == 'n': return _prompt() return _prompt() 起,它应该问你“狗是否正常?”当你说'y'时,立即返回len(matches) == 1

我也尝试过['dogs'],然后返回x。为什么这件事要求你确认两次? 谢谢

1 个答案:

答案 0 :(得分:1)

再次致电if answer == None后,您的_prompt似乎没有回复,因此您将使用正确的answer变量重复两次

因此,您将使用_prompt()致电answer=None,这会提示输入,然后拨打_prompt(answer),这将找到正确的匹配项。 一旦_prompt(answer)调用完成,它将继续调用,现在已经相应地设置了答案,从而在技术上运行最终答案两次。

_prompt(answer)更改为return _prompt(answer)应修复此问题