如何在参数非数值时重启函数?GPA计算器输入校验实现
解决GPA计算器的输入验证问题
嘿,我来帮你搞定这两个输入验证的问题!针对你的GPA计算器需求,咱们一步步调整代码:
1. 参数非数值时重启函数(递归实现)
如果想用递归的方式重启函数,你可以在无效输入的分支里再次调用自身,但要记得重新获取用户输入。不过得提前说,这种方式在极端情况下(用户反复输入错误)可能触发递归深度限制,但日常使用完全没问题:
def get_num_classes(n=None): # 可选逻辑:如果没传参数,主动获取输入让函数更独立 if n is None: n = input("Number of classes this semester: ") if n.isnumeric(): return int(n) else: print("Oops, that's not a valid number. Try again!") # 递归调用自己,重新获取有效输入 return get_num_classes(input("Number of classes this semester: "))
2. 修改函数实现循环重试(更稳妥的方案)
相比递归,用while循环做持续重试是更靠谱的选择,完全不用担心递归深度的问题。我们可以把输入验证的逻辑直接封装在函数内部:
def get_num_classes(): while True: input_str = input("Number of classes this semester: ") if input_str.isnumeric(): return int(input_str) else: print("Invalid input! Please enter a numerical value.")
这种情况下,主文件的调用代码可以简化,不用自己传input了:
num_classes = grade_fcns.get_num_classes()
如果想保留你原来的函数参数设计(接收传入的输入字符串),也可以这么改:
def get_num_classes(n): while not n.isnumeric(): print("That's not a number. Let's try again.") n = input("Number of classes this semester: ") return int(n)
对应的主文件调用还是原来的写法,但第一次输入无效时,函数会自动循环获取新输入直到有效:
num_classes = grade_fcns.get_num_classes(input("Number of classes this semester: "))
额外优化:更健壮的数值验证
isnumeric()方法对罗马数字、特殊格式数字也会返回True,如果要更精准验证整数输入,推荐用try-except块:
def get_num_classes(): while True: try: num = int(input("Number of classes this semester: ")) # 额外校验:课程数量不能为0或负数 if num <= 0: print("Number of classes can't be zero or negative. Try again.") continue return num except ValueError: print("Please enter a valid integer number.")
内容的提问来源于stack exchange,提问作者John Allison
相关产品推荐
相关产品推荐

