Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ruby-on-rails-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 值一直设置为“无”_Python_Python 3.x_Recursion - Fatal编程技术网

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)

在递归调用中也需要
返回
!你能解释一下为什么会这样吗?我试着解释一下,看看最新的答案。