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

Python课程项目求助:优化输入数值范围验证的循环代码

问题描述

课程项目要求编写Python程序实现以下功能:

  • 让用户输入5个0-100之间的数字
  • 显示这些数字
  • 计算并展示数字的总和与平均值

已完成核心功能:最初的代码实现了输入、列表存储、总和与平均值计算,但缺少输入数值的范围验证;之后用多个while循环实现了范围验证,但代码重复冗余,希望采用更高效的方式——通过单条输入逻辑结合循环遍历5次来完成。

初始代码(无范围验证)

print("please enter your 5 marks below")

#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
marksList = [mark1, mark2, mark3, mark4, mark5]

#print the array/list
print(marksList)

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

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

待简化的代码(多while循环做验证)

while True:
    mark1 = int(input("enter mark 1: "))
    if 0 < mark1 <100:
            break
    print('Please enter a number between 0 and 100')

while True:
    mark2 = int(input("enter mark 2: "))
    if 0 < mark2 <100:
        break
    print('Please enter a number between 0 and 100')

while True:
    mark3 = int(input("enter mark 3: "))
    if 0 < mark3 <100:
        break
    print('Please enter a number between 0 and 100')

while True:
    mark4 = int(input("enter mark 4: "))
    if 0 < mark4 <100:
        break
    print('Please enter a number between 0 and 100')

while True:
    mark5 = int(input("enter mark 5: "))
    if 0 < mark5 <100:
        break
    print('Please enter a number between 0 and 100')

优化实现方案

通过封装输入验证逻辑为函数,再结合for循环遍历5次来实现,既减少代码冗余,又保证输入有效性。同时加入非数字输入的异常处理,让程序更健壮。

完整优化代码

def get_valid_mark(mark_num):
    """获取指定序号的有效分数(0-100之间的整数)"""
    while True:
        try:
            mark = int(input(f"enter mark {mark_num}: "))
            if 0 <= mark <= 100:  # 包含0和100,更符合常规分数范围,若需排除边界可改为0 < mark < 100
                return mark
            else:
                print("请输入0到100之间的数字")
        except ValueError:
            print("请输入有效的整数")

# 主程序逻辑
print("请输入你的5个分数:")
marks_list = []
for i in range(1, 6):
    valid_mark = get_valid_mark(i)
    marks_list.append(valid_mark)

# 展示输入的分数
print("你输入的分数为:", marks_list)

# 计算总和与平均值
sum_marks = sum(marks_list)
average_marks = sum_marks / len(marks_list)  # 用len替代固定数字5,后续修改输入数量更灵活

# 展示结果
print(f"分数总和为:{sum_marks}")
print(f"分数平均值为:{average_marks:.2f}")  # 保留两位小数,结果更美观

关键优化点说明

  1. 封装验证函数:把输入、类型校验、范围校验的逻辑打包成函数,避免重复编写5遍循环,提升代码复用性。
  2. 循环收集输入:用for i in range(1,6)循环5次,每次调用函数获取有效分数并添加到列表,代码简洁高效。
  3. 异常处理:加入try-except捕获非整数输入,避免程序崩溃,优化用户体验。
  4. 灵活计算:用len(marks_list)替代固定数字5计算平均值,后续调整输入数量时无需修改计算逻辑。
  5. 格式优化:使用f-string格式化输出,代码可读性更强,结果展示更规范。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 04:25:17