Python 值一直设置为“无”
我有一个递归函数,它在得到正确的输入之前一直调用自己Python 值一直设置为“无”,python,python-3.x,recursion,Python,Python 3.x,Recursion,我有一个递归函数,它在得到正确的输入之前一直调用自己 def input_something(prompt = ""): playerInput = input(prompt) if playerInput == "": print("Error: No input") input_something(prompt) elif not playerInput.isspace(): return playerInput
def input_something(prompt = ""):
playerInput = input(prompt)
if playerInput == "":
print("Error: No input")
input_something(prompt)
elif not playerInput.isspace():
return playerInput
else:
print("Error: Incorrect input")
input_something(prompt)
while True:
print("Input Value")
inp = input_something("> ")
print(type(inp))
print(inp)
print("\n")
如果您给它一个正常值,该函数可以正常工作,但是如果您先给它一个空字符串,然后给它一个字符/字符串,它就会中断。它不是按预期输出字符串,而是给出一个None类型
有人能解释一下吗?您需要
返回递归调用的结果:
def input_something(prompt=”“):
playerInput=输入(提示)
如果playerInput==“”:
打印(“错误:无输入”)
返回输入内容(提示)
elif not playerInput.isspace():
回传播放机
其他:
打印(“错误:输入不正确”)
返回输入内容(提示)
否则,递归调用的函数将运行,但其返回值将被丢弃。请注意,原始函数在三个分支中的两个分支中不返回。在Python中,不返回任何内容意味着返回的值是None
将函数input\u something
更改为:
def input_something(prompt = ""):
playerInput = input(prompt)
if playerInput == "":
print("Error: No input")
return input_something(prompt)
elif not playerInput.isspace():
return playerInput
else:
print("Error: Incorrect input")
return input_something(prompt)
它解决了这个问题
这是因为当代码第一次进入函数时,我们输入的不是正确的输入,它永远不会向while循环返回值
如果我输入“”然后输入“hello”,正确的字符串“hello”将返回到input\u something
的第一次迭代,而不是while循环,那么由于我们对该值不做任何处理,因此函数只会退出,而不会将playerInput变量更改为正确的字符串“hello” 显示的代码以无限递归循环结束,与正确的值无关。如果您的目的是递归检查,直到提供正确的输入,则以下代码将执行:
def input_something(prompt = ""):
playerInput = input(prompt)
while True:
if playerInput == "":
print("Error: No input")
return input_something(prompt)
elif not playerInput.isspace():
return playerInput
else:
print("Error: Incorrect input")
return input_something(prompt)
inp = input_something("> ")
print(inp)
在递归调用中也需要返回!你能解释一下为什么会这样吗?我试着解释一下,看看最新的答案。