Python代码如何添加异常处理器实现循环仅接收用户整数输入
输入校验功能实现方案
你需要通过异常捕获处理非整数输入的场景,我们可以封装一个通用的整数校验函数,避免在多处重复编写校验逻辑,同时保证程序遇非法输入时循环要求用户重输,不会中断运行。
核心实现逻辑
- 利用
try...except结构捕获int()转换非整数字符串时抛出的ValueError异常 - 用无限循环持续接收用户输入,只有输入符合整数要求且在合理数值区间内才返回结果,继续后续流程
- 额外增加数值合理性校验,避免用户输入逻辑上不成立的整数(如负数年龄、负数人数等)
修改后的完整代码
# 导入随机数模块,后续用于生成猜测值 import random # 通用整数输入校验函数 # prompt: 输入提示语 # min_val: 允许输入的最小值 # max_val: 允许输入的最大值 def get_valid_int(prompt, min_val, max_val): while True: input_content = input(prompt) try: input_num = int(input_content) # 校验数值是否在合理区间 if min_val <= input_num <= max_val: return input_num else: print(f"输入无效,请输入介于{min_val}到{max_val}之间的整数") # 捕获非整数输入的异常 except ValueError: print("输入无效,请输入合法的整数") # 欢迎语 print("----------------------------------------------------") print("你好,欢迎使用我的2021年秋季期中项目程序") print("----------------------------------------------------\n\n") # 收集群组人数,用户可输入0退出 groupSize = get_valid_int("请问你的群组今天有多少人?输入0可退出程序:", min_val=0, max_val=1000) while groupSize != 0: total_age = 0 # 提示用户输入每个成员的年龄 print("\n请输入群组中每个人的年龄:\n") for eachLoop in range(1, groupSize + 1): age = get_valid_int(f"第{eachLoop}个人的年龄:", min_val=0, max_val=120) # 累加所有成员的年龄 total_age += age # 计算平均年龄,保留3位小数 averageAge = round(total_age / groupSize, 3) print(f"\n这个群组的平均年龄是{averageAge}。\n") # 生成1-100之间的随机猜测值 randNum = random.randint(1, 100) print(f"我猜测的平均年龄是{randNum:.3f}") if randNum < averageAge: guess_diff = averageAge - randNum print(f"\n我猜得太低了,差了{guess_diff:.3f}") elif randNum > averageAge: guess_diff = randNum - averageAge print(f"\n我猜得太高了,多了{guess_diff:.3f}") else: print("\n哇,我居然猜中了!") # 平均年龄分组 if averageAge <= 19: print("\n你的群组成员都非常年轻。\n\n") elif 20 <= averageAge <= 44: print("\n你的群组属于青年群体。\n\n") elif 45 <= averageAge <= 59: print("\n你的群组属于中年群体。\n\n") elif 60 <= averageAge <= 74: print("\n你的群组属于年轻老年群体。\n\n") elif 75 <= averageAge <= 90: print("\n你的群组属于老年群体。\n\n") else: print("\n你的群组都是长寿人士。\n\n") print("----------------------------------------------------") print("我们再来试一次吧,重新开始。") print("----------------------------------------------------\n\n") # 重新获取群组人数,开启新一轮计算 groupSize = get_valid_int("请问这次你的群组有多少人?输入0可退出程序:", min_val=0, max_val=1000) print("\n\n\n-`-`-`-`-`-`-`-`-`-`感谢使用我的程序!`-`-`-`-`-`-`-`-`-`-")
效果说明
现在不管用户输入字母、小数、符号这类非整数内容,还是输入超出合理范围的整数,程序都会提示输入无效,要求重新输入,不会直接崩溃退出,完全符合输入校验和循环运行的要求。
内容的提问来源于stack exchange,提问作者SnazzyJoe
相关产品推荐
相关产品推荐

