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

Python如何校验用户输入:仅允许0-100数字并解决int转换报错

问题描述

运行成绩统计程序时,若输入非数字内容会直接抛出ValueError: invalid literal for int() with base 10: 'a'类错误,需要完成两个优化:

  • 修复非数字输入导致的程序崩溃问题
  • 限制输入的分数值必须在0到100的合法范围内

原有代码如下:

print("please enter your 5 marks")

#read 5 inputs
mark1 = int(input("enter mark 1: "))
mark2 = int(input("enter mark 2: "))
mark3 = int(input("enter mark 3: "))
mark4 = int(input("enter mark 4: "))
mark5 = int(input("enter mark 5: "))

#create array/list with five marks
marks = [mark1, mark2, mark3, mark4, mark5]

#print the array/list
print(marks)

#calculate the sum and average
sumOfMarks = sum(marks)
averageOfMarks = sum(marks)/5

#display results
print("The sum of your marks is: "+str(sumOfMarks))
print("The average of your marks is: "+str(averageOfMarks))
实现方案

把输入校验逻辑封装成可复用的函数,每次输入时循环校验,直到用户输入符合规则再进入下一步,避免重复写5次相同的校验代码,修改后可直接运行:

def get_valid_mark(mark_index):
    while True:
        user_input = input(f"enter mark {mark_index}: ")
        # 校验是否为合法整数
        try:
            mark = int(user_input)
        except ValueError:
            print("输入无效,请输入纯数字内容!")
            continue
        # 校验数值范围
        if 0 <= mark <= 100:
            return mark
        print("分数输入不合法,请输入0到100之间的数值!")

print("please enter your 5 marks")
# 循环读取5个合法成绩
marks = []
for i in range(1, 6):
    marks.append(get_valid_mark(i))

# 打印成绩列表
print(marks)

# 计算总分和平均分
sumOfMarks = sum(marks)
averageOfMarks = sum(marks)/5

# 输出结果
print(f"The sum of your marks is: {sumOfMarks}")
print(f"The average of your marks is: {averageOfMarks}")
逻辑说明
  • 输入环节用while True做无限循环,只要输入不符合规则就会提示用户重新输入,不会因非法输入直接崩溃
  • try-except块专门捕获整数转换失败抛出的ValueError,针对非数字输入给出明确提示
  • 整数转换成功后立刻做范围判断,不符合0-100区间要求的输入也会触发重输
  • 抽离公共的输入校验函数,不用为5个成绩分别写重复的校验逻辑,后续如果要调整读取的成绩数量,只需要修改循环范围即可,维护成本更低

内容的提问来源于stack exchange,提问作者Moni

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 18:16:00