python - 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
检查inp
python 控制台:-
>> 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)
我如何获得实际价值?
解决方案
递归调用函数时忘记返回 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
推荐阅读
- google-cloud-platform - 如何在 GCP 上使用 Cloud Build 在 CI/CD 脚本中包含 Container Registry 漏洞扫描
- javascript - 向箭头函数添加花括号会提高性能吗?
- r - 基于R中的sliderInput日期范围绘制图表
- c++ - 编译器错误出现在一台特定的机器上
- python - Python Pandas Exception 在函数方法中执行 Pandas 操作时发生“示例”,简单函数有效
- swift - 倒数计时器将不起作用,因为它不接受本地函数
- google-apps-script - 有没有办法在从 Gmail 撰写窗口发送邮件时触发应用脚本功能?
- javascript - 如何使用打字稿对象数组而不是单一类型的元素(如字符串)来实现 ngx-select-dropdown
- c - 为什么这个程序不打印'4'?
- c# - 标签值在我将其分配给对象时发生变化