Python:递归,我一直得到错误的值,我能做什么?

时间:2013-09-27 14:39:40

标签: python recursion

def answer(): 
    if True:
        ans = raw_input('Enter y/n:')

        if ans != "y" and ans != "n":
            print "Try again"
            answer()
        elif ans == "n":
            return False
        elif ans == "y":
            return True
if answer():
    print "It's working!, you entered Y"
else:
    print "You entered N"

当我执行此代码时,我按Enter键几次或输入错误的字母,然后我输入y,我总是得到“你输入N”而不是“它正在工作!,你输入了Y”。

我无法弄清问题是什么,请帮助我。

2 个答案:

答案 0 :(得分:9)

您正在放弃if块中函数的返回值。你应该把它改成:

if ans != "y" and ans != "n":
    print "Try again"
    return answer()

如果您未返回该值,则您的函数将返回None,该值将在False外部评估为if。此外,您的函数内部不需要if True:

P.S:请避免使用递归来完成此任务。您可以使用while循环轻松执行此操作,该循环将迭代直到用户未传递正确的输入,并在成功后立即中断。此外,为用户提供一定数量的尝试来传递正确的输入,以避免无限循环。

答案 1 :(得分:3)

在这种情况下你真的不需要递归,只是使用无限循环,如果答案不是“y”或“n”则不返回:

def answer(): 
    while True:
        ans = raw_input('Enter y/n:')
        if not ans or ans not in "yn":
            print "Try again"
        else:
            return ans == "y"  # This is more succinct

if answer():
    print "It's working!, you entered Y"
else:
    print "You entered N"