python完成简单的学生成绩管理程序(计算平均成绩)

题目:学生成绩管理程序,程序允许用户连续输入一个班的学生成绩并计算平均分。 输入的成绩必须是数字,若输入非数字字符,则抛出并捕获 ValueError 异常;如果成绩不在 0~100 之间,则抛出并捕获自定义异常xxx;在计算平均成绩时,检查学生成绩是否为空或无效的情况。

要求: 自定义异常 xxx 。 用 while 循环让用户可以多次输入成绩。 使用 if-else 判断成绩是否合法。


首先,我们自定义了一个异常 InvalidScore(可改),当输入的成绩不在 0 – 100 之间时会抛出这个异常。异常中可以包含自定义的错误消息。

class InvalidScore(Exception):

    def __init__(self, message):

        self.message = message
        super().__init__(self.message)

定义了一个函数  calculate_average  ,用于计算平均分。首先创建了一个空列表  scores  来存储输入的成绩。

def calculate_average():
    scores = []

使用一个无限的  while  循环,让用户不断输入成绩。用户输入后,首先判断是否为 'q' (退出的字符可以自己决定),如果是则退出循环。然后尝试将输入转换为浮点数,如果转换失败会捕获  ValueError  异常。接着判断成绩是否在 0 – 100 之间,如果不在则抛出我们自定义的  InvalidScoreException  异常,并将有效的成绩添加到  scores  列表中。

    while True:
        try:
            score = input("请输入学生成绩(输入'q'结束输入):")
            if score == 'q':
                break
            score = float(score)
            if score < 0 or score > 100:
                raise InvalidScoreException("成绩必须在 0 - 100 之间")
            scores.append(score)

捕获 ValueError  异常并提示用户输入必须是数字,捕获 InvalidScoreException  异常并输出异常中的错误消息。

        except ValueError:
            print("输入必须是数字,请重新输入")
        except InvalidScoreException as e:
            print(e.message)

在循环结束后,判断 scores  列表是否为空,如果为空说明没有有效的成绩输入,无法计算平均分。如果不为空,则计算平均分并输出。

    if not scores:
        print("没有输入有效的成绩,无法计算平均分")
    else:
        average = sum(scores) / len(scores)
        print("平均成绩为:", average)

由以上总结出完整代码如下:

#定义一个异常类
class InvalidScore(Exception):

    def __init__(self, message):

        self.message = message

#函数用于计算平均分
def calculate_average():
    scores = []
    while True:
        try:
            score = input("请输入学生成绩(输入'q'结束输入):")
            if score == 'q':
                break
            score = float(score)
            if score < 0 or score > 100:
                raise InvalidScoreException("成绩必须在 0 - 100 之间")
            scores.append(score)
        except ValueError:
            print("输入必须是数字,请重新输入")
        except InvalidScoreException as e:
            print(e.message)
    if not scores:
        print("没有输入有效的成绩,无法计算平均分")
    else:
        average = sum(scores) / len(scores)
        print("平均成绩为:", average)


calculate_average()

当然也有不用函数实现的方法,同样定义一个名为 ScoreError 的自定义异常类,它继承自内置的 Exception 类。这个异常类用于处理成绩不在有效范围内的情况。使用一个无限循环 while True: 来允许用户重复输入成绩,直到用户决定停止输入。

class ScoreError(Exception):
    def __init__(self, message):
        self.message = message
        super().__init__(self.message)
# 主程序
while True:  #在每次主循环开始时,初始化 total_score 为 0,用于累加所有有效的成绩
    total_score = 0
    count = 0  #初始化 count 为 0,用于记录有效成绩的数量
    scores = [] #初始化 scores 为一个空列表,用于存储所有有效的成绩
    while True:
        try:
            score = input("请输入学生成绩(输入 'q' 结束): ")#break
            if score == 'q':
                break
            score = float(score)
            if not 0 <= score <= 100:
                raise ScoreError("成绩必须在 0 到 100 之间")
                #如果不在这个范围内,抛出 ScoreError 异常,并打印出错误信息。
            scores.append(score)
        except ValueError:
            print("输入的不是有效数字,请重新输入")
        except ScoreError as e:
            print(e.message)

    if len(scores) == 0:
        print("未输入有效成绩,无法计算平均分")
    else:
        for i in scores:
            total_score += i
            count += 1
        average = total_score / count
        print("平均成绩为:", average)
        break

上述代码确保了只有有效的成绩才会被计算在内,且用户可以随时通过输入 'q' 来结束成绩输入。如果输入的成绩不在指定范围内,程序会提示错误并要求重新输入。程序在用户输入有效成绩并计算平均分后结束。

作者:闻屿笙

物联沃分享整理
物联沃-IOTWORD物联网 » python完成简单的学生成绩管理程序(计算平均成绩)

发表回复