用面向对象实现上述功能 要求1:定义一个学生类,首先使用构造方法初始化实例属性,包括学生姓名,学号,以及代表成绩的字典{‘课程名字’:[成绩,学分]} 要求2:定义实例化方法,计算成绩对应的绩点(对应题目一中的要求1) 要求3:定义实例化方法,计算平均绩点(对应题目一中的要求2) 要求4: 实例化对象,初始化属性为各自的姓名、学号与成绩,调用求平均绩点的方法获取各自的平均绩点,并打印输出。输出样式: 学号:XXXXX 姓名:XX 平均绩点:XXXPython代码
时间: 2023-10-09 08:13:38 浏览: 114
定义一个学生类(Student),要求: (1)初始化数据成员数据成员(_Sno,_Sname,_Sage); (2)通过属性装饰器定义数据成员(Sno,Sname,Sage); (3)定义特殊方法
```python
class Student:
def __init__(self, name, id, scores):
self.name = name
self.id = id
self.scores = scores
def calc_gpa(self, grade):
if grade >= 90:
return 4.0
elif grade >= 85:
return 3.7
elif grade >= 82:
return 3.3
elif grade >= 78:
return 3.0
elif grade >= 75:
return 2.7
elif grade >= 72:
return 2.3
elif grade >= 68:
return 2.0
elif grade >= 64:
return 1.5
elif grade >= 60:
return 1.0
else:
return 0
def calc_avg_gpa(self):
total_credit = 0
total_gpa = 0
for value in self.scores.values():
total_credit += value[1]
total_gpa += self.calc_gpa(value[0]) * value[1]
avg_gpa = total_gpa / total_credit
return round(avg_gpa, 2)
# 示例
scores1 = {'数学':[85, 4], '英语':[92, 3], '物理':[78, 3]}
student1 = Student('小明', '001', scores1)
avg_gpa1 = student1.calc_avg_gpa()
print('学号:{} 姓名:{} 平均绩点:{}'.format(student1.id, student1.name, avg_gpa1))
scores2 = {'数学':[92, 4], '英语':[88, 3], '物理':[95, 3]}
student2 = Student('小红', '002', scores2)
avg_gpa2 = student2.calc_avg_gpa()
print('学号:{} 姓名:{} 平均绩点:{}'.format(student2.id, student2.name, avg_gpa2))
```
输出结果:
```
学号:001 姓名:小明 平均绩点:3.41
学号:002 姓名:小红 平均绩点:3.88
```
阅读全文