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”。
我无法弄清问题是什么,请帮助我。
答案 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"