设计 3 个类 , 分别是学生类 Student, 本科生类 Undergaduate, 研究生类 Postgraduate, 其中 Student 类是一个抽象类 , 它包含一些基本的学生信息如姓名、所学课程、课程成绩等 , 而 Undergraduate 类和 Postgraduate 都是 Student 类的子类 , 它们之间的主要差别是计算课程成绩等级的方法有所不同 , 研究生的标准要比本科生的标准高一些 , 如下表所示。 本科生标准 研究生标准 80-100 优秀 90-100 优秀 70-80 良好 80-90 良好 60-70 一般 70-80 一般 50-60 及格 60-70 及格 50以下 不及格 60以下 不及格 假设某班级里既有本科生也有研究生 , 请编写程序统计出全班学生的成绩等级并显示出来。此题关键是设计一个学生数组 , 既能存放本科生对象 , 又能存放研究生对象。 定义学生数组中,存放2个研究生和1个本科生的信息如下: 本科生 zhang的Java成绩为56 研究生li的Java成绩为56 研究生wu的Java成绩为88
时间: 2024-03-24 19:41:26 浏览: 126
以下是代码实现:
```python
# 定义抽象类 Student
from abc import ABCMeta, abstractmethod
class Student(metaclass=ABCMeta):
def __init__(self, name, course, score):
self.name = name
self.course = course
self.score = score
@abstractmethod
def get_grade(self):
pass
# 定义本科生类 Undergraduate 继承自 Student
class Undergraduate(Student):
def __init__(self, name, course, score):
super().__init__(name, course, score)
def get_grade(self):
if self.score >= 80:
return "优秀"
elif self.score >= 70:
return "良好"
elif self.score >= 60:
return "一般"
elif self.score >= 50:
return "及格"
else:
return "不及格"
# 定义研究生类 Postgraduate 继承自 Student
class Postgraduate(Student):
def __init__(self, name, course, score):
super().__init__(name, course, score)
def get_grade(self):
if self.score >= 90:
return "优秀"
elif self.score >= 80:
return "良好"
elif self.score >= 70:
return "一般"
elif self.score >= 60:
return "及格"
else:
return "不及格"
# 创建学生数组
students = []
students.append(Undergraduate("zhang", "Java", 56))
students.append(Postgraduate("li", "Java", 56))
students.append(Postgraduate("wu", "Java", 88))
# 统计全班学生的成绩等级并显示出来
for student in students:
print(student.name, "的成绩等级为:", student.get_grade())
```
输出结果为:
```
zhang 的成绩等级为: 不及格
li 的成绩等级为: 不及格
wu 的成绩等级为: 良好
```
注意事项:
- 抽象类 Student 中定义了一个抽象方法 get_grade,子类必须实现该方法。
- 定义了本科生类 Undergraduate 和研究生类 Postgraduate,它们分别重写了抽象方法 get_grade,实现了计算成绩等级的逻辑。
- 创建了一个学生数组 students,既能存放 Undergraduate 对象,又能存放 Postgraduate 对象。
- 遍历学生数组,根据每个学生对象的不同类型,调用相应的 get_grade 方法,计算成绩等级并输出。
阅读全文