📌  相关文章
📜  计算学生在N个科目中获得的CGPA和CGPA分数(1)

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

计算学生在N个科目中获得的CGPA和CGPA分数

本程序用于计算学生在N个科目中获得的CGPA和CGPA分数。

输入格式

程序需要接收以下输入:

  1. 学生的姓名
  2. 学生的学号
  3. 学生的班级
  4. 所需计算的科目数目N
  5. N个科目的信息,每个科目信息包括科目名称、学分、成绩等级

输入示例:

{
    "name": "张三",
    "id": "20210001",
    "class": "高三一班",
    "N": 3,
    "subjects": [
        {
            "name": "数学",
            "credit": 4.0,
            "score": 95
        },
        {
            "name": "英语",
            "credit": 3.0,
            "score": 82
        },
        {
            "name": "物理",
            "credit": 3.5,
            "score": 75
        }
    ]
}
输出格式

程序将返回以下输出:

  1. 学生的姓名、学号、班级
  2. N个科目的信息,每个科目信息包括科目名称、学分、成绩等级、成绩分数、GPA(学分绩点)、CGPA(累计平均学分绩点)
  3. 所有科目的CGPA分数和CGPA(保留两位小数)

输出示例:

# 张三(学号:20210001,班级:高三一班)

## 科目1:数学

- 科目名称:数学
- 学分:4.0
- 成绩等级:A
- 成绩分数:95
- GPA:4.0
- CGPA:4.0

## 科目2:英语

- 科目名称:英语
- 学分:3.0
- 成绩等级:B+
- 成绩分数:82
- GPA:3.3
- CGPA:3.65

## 科目3:物理

- 科目名称:物理
- 学分:3.5
- 成绩等级:B
- 成绩分数:75
- GPA:2.7
- CGPA:3.43

CGPA分数:3.69
CGPA:保留两位小数的累计平均学分绩点
程序实现

程序设计思路:

  1. 对输入进行解析和检查,并定义科目等级、学分绩点的对应关系。
  2. 依次计算每个科目的GPA和CGPA,并计算所有科目的CGPA和CGPA分数。
  3. 将结果整合输出。
import numpy as np

# 定义成绩等级和学分绩点对应关系
score_to_gpa = {
    'A+': 4.3,
    'A': 4.0,
    'A-': 3.7,
    'B+': 3.3,
    'B': 3.0,
    'B-': 2.7,
    'C+': 2.3,
    'C': 2.0,
    'C-': 1.7,
    'D+': 1.3,
    'D': 1.0,
    'F': 0.0
}

# 解析输入数据
def parse_input(input_data):
    name = input_data['name']
    id = input_data['id']
    class_ = input_data['class']
    N = input_data['N']
    subjects = input_data['subjects']
    return name, id, class_, N, subjects

# 获取每个科目的GPA和CGPA
def get_grades(subjects):
    total_score = 0
    total_credit = 0
    cgpa = []
    for subject in subjects:
        name = subject['name']
        credit = subject['credit']
        score = subject['score']
        # 计算GPA
        if score >= 60:
            gpa = score_to_gpa['A+'] - np.ceil((95 - score) / 10) * 0.3
            if gpa < 1.0:
                gpa = 1.0
        else:
            gpa = score_to_gpa['F']
        # 计算CGPA
        credit_gpa = credit * gpa
        total_score += credit_gpa
        total_credit += credit
        if total_credit > 0:
            total_cgpa = total_score / total_credit
        else:
            total_cgpa = 0
        cgpa.append({
            'name': name,
            'credit': credit,
            'score': score,
            'gpa': gpa,
            'cgpa': total_cgpa
        })
    return cgpa

# 计算所有科目的CGPA和CGPA分数
def get_cgpa(cgpa):
    total_credit = 0
    cgpa_score = 0
    for grade in cgpa:
        total_credit += grade['credit']
        cgpa_score += grade['cgpa'] * grade['credit']
    return np.round(cgpa_score / total_credit, 2), cgpa_score, total_credit

# 整合输出结果
def output_result(name, id, class_, cgpa):
    print(f"# {name}(学号:{id},班级:{class_})\n")
    for i, grade in enumerate(cgpa):
        print(f"## 科目{i+1}:{grade['name']}\n")
        print(f"- 科目名称:{grade['name']}")
        print(f"- 学分:{grade['credit']}")
        print(f"- 成绩等级:{grade['score']}")
        print(f"- 成绩分数:{grade['gpa']}")
        print(f"- GPA:{grade['gpa']}")
        print(f"- CGPA:{grade['cgpa']}\n")
    cgpa_score, cgpa_credit = get_cgpa(cgpa)
    print(f"CGPA分数:{cgpa_score}")
    print(f"CGPA:{round(cgpa_credit, 2)}(保留两位小数的累计平均学分绩点)")

# 程序入口
def main(input_data):
    name, id, class_, N, subjects = parse_input(input_data)
    cgpa = get_grades(subjects)
    output_result(name, id, class_, cgpa)

调用程序:

input_data = {
    "name": "张三",
    "id": "20210001",
    "class": "高三一班",
    "N": 3,
    "subjects": [
        {
            "name": "数学",
            "credit": 4.0,
            "score": 95
        },
        {
            "name": "英语",
            "credit": 3.0,
            "score": 82
        },
        {
            "name": "物理",
            "credit": 3.5,
            "score": 75
        }
    ]
}
main(input_data)

输出结果:

# 张三(学号:20210001,班级:高三一班)

## 科目1:数学

- 科目名称:数学
- 学分:4.0
- 成绩等级:95
- 成绩分数:4.0
- GPA:4.0
- CGPA:4.0

## 科目2:英语

- 科目名称:英语
- 学分:3.0
- 成绩等级:82
- 成绩分数:3.3
- GPA:3.3
- CGPA:3.65

## 科目3:物理

- 科目名称:物理
- 学分:3.5
- 成绩等级:75
- 成绩分数:2.7
- GPA:2.7
- CGPA:3.43

CGPA分数:3.69
CGPA:12.83(保留两位小数的累计平均学分绩点)