📅  最后修改于: 2023-12-03 15:41:38.686000             🧑  作者: Mango
本程序用于计算学生在N个科目中获得的CGPA和CGPA分数。
程序需要接收以下输入:
输入示例:
{
"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
}
]
}
程序将返回以下输出:
输出示例:
# 张三(学号: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:保留两位小数的累计平均学分绩点
程序设计思路:
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(保留两位小数的累计平均学分绩点)