我正在编写一个GPA计算器,并且我想确保输入的类数是一个数值。如果没有,如何使下面的函数返回?
def get_num_classes(n):
num_classes = n
if n.isnumeric():
return int(num_classes)
else:
#???
在主文件中,该函数称为:
num_classes = grade_fcns.get_num_classes(input("Number of classes this semester: "))
答案 0 :(得分:1)
使用while
循环将输入的验证委托给int
:
def get_num_classes():
while True:
try:
return int(input("Number of classes this semester: "))
except ValueError:
print('Try again')
print(get_num_classes())
示例:
Number of classes this semester: s
Try again
Number of classes this semester: sd
Try again
Number of classes this semester: 3
3
该解决方案不倾向于无限递归(以及不可避免的堆栈溢出)。
答案 1 :(得分:0)
考虑到None
没有道理(我的意思是,这没有“不是有效的东西”的其他含义),我会尝试这样做:
def get_num_classes(n):
num_classes = n
if n.isnumeric():
return int(num_classes)
return None #There's no need of else here, once we're talking about return statements
,然后从while(True)
语句中调用它:
while (True):
answer = get_num_classes(input("Number of classes this semester: "))
if answer is not None:
#Do something else
break
else:
print("Try again...\n")
这种方法不是递归的,但是一旦while(True)
永远挂在那里,您应该当心。您甚至可以使用try / except方法,例如,可以在其中检查其他条件:它是整数吗?大于0吗?是介于x
和y
之间吗?并且,如果不满足这些条件,请引发一个异常,例如AttributeError
,然后将其捕获到主代码中。
希望有帮助