我有一个要求提供某些特定数据的函数。我还有另一个接受输入的函数,如果它应该是输入的话,它将分配给被调用的变量。
问题是,如果我得到了错误的值,那么即使我第二次得到正确的答案,它也将始终返回NoneType
对象。
我尝试删除clear()
。我试图增加更多的回报,即使答案不应该通过。我尝试在函数中添加第二个参数,并使用要分配值的变量的名称
def ask_input_string(text):
''' Takes only one argument. This function asks for input when it is called and returns the value but with the argument provided as text. '''
variable=input(text)
if variable=="":
print("\nField must not be empty")
ask_input_string(text)
try:
int(variable)
print("\nPlease enter a name!")
ask_input_string(text)
except ValueError:
return variable
def menu_add():
clear()
print("\nPlease add the data required!\n")
nume=ask_input_string("Name of animal: ")
animal_type=ask_input_string("\nAnimal Type: ")
预期结果:
如果我添加了错误的值,它将要求输入正确的值。我给出正确的变量,并将其分配给调用它的变量。
实际结果:
如果我至少给出了错误的答案1次,那么即使我得到了正确的答案,它也会始终将NoneType
分配给调用它的变量。
如果我第一次给出正确答案,它将起作用。如果我首先给出错误的答案,它将不起作用。
答案 0 :(得分:1)
def ask_input_string(text):
variable = input(text)
if variable == "":
print("\nField must not be empty")
return ask_input_string(text)
try:
int(variable)
print("\nPlease enter a name!")
return ask_input_string(text)
except ValueError:
return variable
您必须从递归调用中返回值。您不会像通常那样扔掉一个函数的结果,并且递归并不是很特别,它只是另一个函数调用。