学生成绩处理问题。假定“生物医学工程”和“生物工程”两个专业的学生分别上以下课程: (1) 生物医学工程:数学、英语、物理、电子、机械 (2) 生物工程: 数学、英语、物理、分子、生化 假定“生物医学工程”班有4名学生,“生物工程”班有5名学生,分别计算并输出两个班级各门课程的平均分、最高分、最低分、……。 要求: 采用派生关系建立以下类:abstractClass(抽象类)类、BMEclass(生物医学工程班)类和BEclass(生物工程班)类: (1) 对数据而言, class类:包含两个班级的共同课程; BMEclass类和Beclass类:分别包含各自的课程; (2) 对数据(成绩)的处理函数(含输入输出),请放置在合适的类中。
时间: 2023-11-27 11:54:25 浏览: 54
以下是使用派生关系建立的类:
```python
from abc import ABC, abstractmethod
class AbstractClass(ABC):
def __init__(self, name, courses):
self.name = name
self.courses = courses
self.scores = {}
@abstractmethod
def calculate_scores(self):
pass
def get_avg_score(self, course):
return sum(self.scores[course])/len(self.scores[course])
def get_max_score(self, course):
return max(self.scores[course])
def get_min_score(self, course):
return min(self.scores[course])
class BMEclass(AbstractClass):
def __init__(self):
super().__init__("生物医学工程", ["数学", "英语", "物理", "电子", "机械"])
def calculate_scores(self):
for course in self.courses:
self.scores[course] = []
for i in range(4):
score = float(input(f"请输入{self.name}班{i+1}号学生的{course}成绩:"))
self.scores[course].append(score)
class BEclass(AbstractClass):
def __init__(self):
super().__init__("生物工程", ["数学", "英语", "物理", "分子", "生化"])
def calculate_scores(self):
for course in self.courses:
self.scores[course] = []
for i in range(5):
score = float(input(f"请输入{self.name}班{i+1}号学生的{course}成绩:"))
self.scores[course].append(score)
```
使用方法:
```python
bme = BMEclass()
bme.calculate_scores()
print(f"{bme.name}班各门课程的平均分、最高分、最低分:")
for course in bme.courses:
print(f"{course}平均分:{bme.get_avg_score(course):.2f},最高分:{bme.get_max_score(course)},最低分:{bme.get_min_score(course)}")
be = BEclass()
be.calculate_scores()
print(f"{be.name}班各门课程的平均分、最高分、最低分:")
for course in be.courses:
print(f"{course}平均分:{be.get_avg_score(course):.2f},最高分:{be.get_max_score(course)},最低分:{be.get_min_score(course)}")
```
阅读全文