📜  DSA 的第一步 – 9 至 12 班学生的奖学金测试(1)

📅  最后修改于: 2023-12-03 15:00:33.062000             🧑  作者: Mango

DSA 的第一步 – 9 至 12 班学生的奖学金测试

本文介绍针对 9 至 12 班的学生进行奖学金测试的 DSA 程序,该程序可以根据学生的成绩和出勤情况计算他们是否符合获得奖学金的条件。

奖学金计算规则

对于每个学生,他们必须满足以下两个条件才能获得奖学金:

  1. 出勤率不低于 90%
  2. GPA 不低于 3.5

根据学生的成绩和出勤情况,可以计算他们的出勤率和 GPA。出勤率可以使用以下公式计算:

出勤率 = 已出勤次数 / 总共应出勤次数

其中,已出勤次数可以从记录中获得,总共应出勤次数为某个固定的值。GPA 可以使用以下公式计算:

GPA = 所有得分之和 / 所有学分之和

其中,每个科目的得分和学分可以从记录中获得。

程序实现
输入

程序从一个包含学生信息的列表开始运行,每个学生记录包括以下字段:

  • 姓名(string):学生的姓名
  • 年级(int):学生的年级
  • 出勤记录(list):学生的出勤记录,每个元素为布尔型,表示该次是否出勤
  • 成绩记录(list):学生的成绩记录,每个元素为元组类型,包括两个字段:
    • 得分(float):该科目的得分
    • 学分(float):该科目的学分

例如,下面是一个包含两个学生记录的列表:

students = [
    {
        '姓名': '张三',
        '年级': 9,
        '出勤记录': [True, True, True, False, True, True, True, True, True, True],
        '成绩记录': [
            {'得分': 90, '学分': 3},
            {'得分': 80, '学分': 4},
            {'得分': 85, '学分': 2.5},
            {'得分': 95, '学分': 3},
            {'得分': 70, '学分': 4},
        ],
    },
    {
        '姓名': '李四',
        '年级': 10,
        '出勤记录': [True, True, True, True, False, True, True, True, True, True],
        '成绩记录': [
            {'得分': 95, '学分': 3},
            {'得分': 90, '学分': 4},
            {'得分': 80, '学分': 2.5},
            {'得分': 85, '学分': 3},
            {'得分': 75, '学分': 4},
        ],
    },
]
输出

程序对每个学生进行计算,返回符合条件的学生列表,其中每个元素包括以下字段:

  • 姓名(string):学生的姓名
  • 年级(int):学生的年级
  • 是否符合(bool):学生是否符合获得奖学金的条件
  • 出勤率(float):学生的出勤率
  • GPA(float):学生的 GPA

例如,对于上面的样例数据,程序的输出应该是:

[
    {
        '姓名': '张三',
        '年级': 9,
        '是否符合': False,
        '出勤率': 0.9,
        'GPA': 3.37,
    },
    {
        '姓名': '李四',
        '年级': 10,
        '是否符合': False,
        '出勤率': 0.9,
        'GPA': 3.4,
    },
]
程序实现

下面给出基于 Python 的实现代码,该代码实现了上述的奖学金测试功能。

def calculate_attendance_rate(attendance_record):
    total_count = len(attendance_record)
    present_count = sum(attendance_record)
    return present_count / total_count if total_count > 0 else 0

def calculate_gpa(score_record):
    total_score = sum(item['得分']*item['学分'] for item in score_record)
    total_credit = sum(item['学分'] for item in score_record)
    return total_score / total_credit if total_credit > 0 else 0

def calculate_scholarship(students):
    scholarship_list = []
    for student in students:
        attendance_rate = calculate_attendance_rate(student['出勤记录'])
        gpa = calculate_gpa(student['成绩记录'])
        is_qualified = attendance_rate >= 0.9 and gpa >= 3.5
        scholarship_list.append({
            '姓名': student['姓名'],
            '年级': student['年级'],
            '是否符合': is_qualified,
            '出勤率': attendance_rate,
            'GPA': gpa,
        })
    return scholarship_list

在该实现中,我们分别实现了计算出勤率和 GPA 的函数 calculate_attendance_rate()calculate_gpa(),以及奖学金测试的主函数 calculate_scholarship()。对每个学生,该函数会计算其出勤率和 GPA,并根据这两个值判断该学生是否符合获得奖学金的条件,并将结果保存到一个列表中返回。