Python 如果参数为';不是数字吗?

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循环

我正在编写一个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
循环将输入验证委托给
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,因为这会破坏它