Python 如果参数为';不是数字吗?
我正在编写一个GPA计算器,我想确保输入的类数是一个数值。如果下面的函数不是循环的,如何使其返回Python 如果参数为';不是数字吗?,python,Python,我正在编写一个GPA计算器,我想确保输入的类数是一个数值。如果下面的函数不是循环的,如何使其返回 def get_num_classes(n): num_classes = n if n.isnumeric(): return int(num_classes) else: #??? 在主文件中,该函数称为: num\u classes=grade\u fcns。获取num\u classes(输入(“本学期的课程数量”)使用while循环
def get_num_classes(n):
num_classes = n
if n.isnumeric():
return int(num_classes)
else:
#???
在主文件中,该函数称为:
num\u classes=grade\u fcns。获取num\u classes(输入(“本学期的课程数量”)
使用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
解决方案不容易出现无限递归(以及不可避免的堆栈溢出)。考虑到
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
,然后在主代码中捕获它
希望有帮助你能澄清一下这里的环回是什么意思吗?就像在重新提示用户输入,重新运行函数检查输入是否是数字,如果是,则返回。只需将
get_num_classes(输入(“本学期的课程数”)
放在code@pdrersin我试过了,但是它似乎没有正确地执行后续的return元素。@johnalison我在那里丢失了一个return语句。“现在已经修好了。@VasuDeo.S OP问题的全部前提是有这个函数,我想它有一些其他的逻辑,而不仅仅是我们在问题中看到的,我喜欢你的解决方案。”。但这是一个简单的函数调用。您只需要再调用一两次即可。@pdrersin请执行您的代码,并提供996次无效答案。@DeepSpace,我为什么要这样做?@pdrersin,因为这会破坏它