首页 > 解决方案 > python if-else递归函数返回不需要的值

问题描述

我在这里面临一个条件逻辑问题。

我想从用户那里得到一个值,但它应该只限于

'ABC','DEF' or'XYZ'

如果没有提供上述任何一项,程序应该给用户另一个输入的机会,直到它只从它的预期值中获得输入

我的片段如下:-

def foo():
    inp_val=raw_input("Enter value\n>> ")
    if inp_val.upper() not in {'ABC','DEF','XYZ'}:
        print("Invalid Input")
        foo()
    return inp_val
inp = foo()

输出

Enter value
>> 42342d*@r2
Invalid Input
Enter value
>> abc

检查inppython 控制台:-

>> inp
ABC #(Expected)
42342d*@r2 #(Actual)

为什么会这样?

我也尝试了相反的逻辑:-

def bar():
    inp_val=raw_input("Enter value\n>> ")
    if inp_val.upper() in {'ABC','DEF','XYZ'}:
        return inp_val
    else:
        print("invalid input")
        bar()
inp = bar()

输出:

Enter value
>> 42342d*@r2
Invalid Input
Enter value
>> abc

在控制台中:

>> inp
ABC #Expected
    #(Actual)

我如何获得实际价值?

标签: pythonpython-2.7functionif-statementreturn

解决方案


递归调用函数时忘记返回 foo() 。

 #!/usr/bin/python

   def foo():
       inp_val=raw_input("Enter value\n>> ")
       if inp_val.upper() not in {'ABC','DEF','XYZ'}:
           print("Invalid Input")
           return foo()
       return inp_val
   inp = foo()
   print(inp)

影响:

~/sandbox » python a.py                                                                                                                                                                                          tracma01@londev1tracma01
Enter value
>> f
Invalid Input
Enter value
>> ABC
ABC

推荐阅读