初学者程序员在这里,使用python2.7.10。我有个密码:
def yesno():
answer = raw_input("(Y/N) > ").upper()
if answer == "Y":
return True
elif answer == "N":
return False
else:
yesno()
if yesno():
print("Yes")
else:
print("No")
如果条件不满足,我尝试调用函数本身来“重启”它。我的问题是,当我多次重新启动它时,它不会返回它应该返回的值。例如,如果我第一次输入“X”,第二次输入“Y”,最后仍然会打印“No”。有没有更好的方法重新启动函数本身?你知道吗
您的错误只是没有从递归调用返回值。将
else
分支更改为return yesno()
,它将正常工作。您可以使用while
循环而不是函数来实现这一点:试试这个:
应该有用。我刚刚测试过。你知道吗
说明:
当if语句第一次调用函数时,它期望返回一个值。当第一个输入是X时,函数的流到达else部分并再次调用yesno()以请求另一个输入。当用户输入一个Y时,它不是返回给调用它的if语句,而是返回给第一个函数调用。你知道吗
然后变成这样:
由于函数的第一次调用从未返回任何内容,因此if语句没有变为true。希望这有助于理解!你知道吗
没有递归函数有更好的方法。如果用户没有输入正确的输入,只需抛出一个错误或打印一条消息:
这种方法比递归函数有一些优点。如果使用递归函数,每次重新调用它时,都会一直推到堆栈帧,一旦递归超过1000次,程序就会抛出错误。你知道吗
最好显示一条消息,然后再次请求输入。你知道吗
如果您真的想要递归解决方案,那么只需更改以下递归调用:
对此:
相关问题 更多 >
编程相关推荐