我在这里面临条件逻辑问题。
我想从用户那里得到一个值,但只能将其限制在其中一个
'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
在python控制台中检查inp
:-
>> 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)
如何获取实际值?
答案 0 :(得分:2)
递归调用函数时,您忘记返回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
答案 1 :(得分:1)
尝试一下。
def foo():
inp_val=input("Enter value\n>> ")
if inp_val.upper() not in {'ABC','DEF','XYZ'}:
print("Invalid Input")
return foo()
else:
return inp_val
inp = foo()
答案 2 :(得分:0)
我个人对此:-
def bar():
temp = True
while temp:
inp_val = raw_input("Enter value\n>> ")
if inp_val.upper() in {'ABC','DEF','XYZ'}:
temp = False
return inp_val
else:
print("invalid input")
确保它需要循环而不是递归,并且效率较低。但是,如果要通过不回溯来节省内存,请尝试此操作。