You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 11:27:04