学生成绩处理问题。假定“生物医学工程”和“生物工程”两个专业的学生分别上以下课程: (1) 生物医学工程:数学、英语、物理、电子、机械 (2) 生物工程: 数学、英语、物理、分子、生化 假定“生物医学工程”班有4名学生,“生物工程”班有5名学生,分别计算并输出两个班级各门课程的平均分、最高分、最低分、……。 要求: 采用派生关系建立以下类:abstractClass(抽象类)类、BMEclass(生物医学工程班)类和BEclass(生物工程班)类: (1) 对数据而言, class类:包含两个班级的共同课程; BMEclass类和Beclass类:分别包含各自的课程; (2) 对数据(成绩)的处理函数(含输入输出),请放置在合适的类中。
时间: 2023-11-27 11:53:41 浏览: 170
下面是Python代码实现,采用了抽象类和多重继承:
```python
from abc import ABC, abstractmethod
class abstractClass(ABC):
def __init__(self):
self.courses = ["数学", "英语", "物理"]
super().__init__()
@abstractmethod
def get_scores(self):
pass
class BMEclass(abstractClass):
def __init__(self):
self.courses += ["电子", "机械"]
self.students = 4
self.scores = [[0]*len(self.courses) for _ in range(self.students)]
super().__init__()
def get_scores(self):
print("生物医学工程班成绩:")
for i in range(self.students):
for j in range(len(self.courses)):
self.scores[i][j] = int(input("请输入第{}个学生的{}成绩:".format(i+1, self.courses[j])))
print()
class BEclass(abstractClass):
def __init__(self):
self.courses += ["分子", "生化"]
self.students = 5
self.scores = [[0]*len(self.courses) for _ in range(self.students)]
super().__init__()
def get_scores(self):
print("生物工程班成绩:")
for i in range(self.students):
for j in range(len(self.courses)):
self.scores[i][j] = int(input("请输入第{}个学生的{}成绩:".format(i+1, self.courses[j])))
print()
class classScores(BMEclass, BEclass):
def __init__(self):
super().__init__()
def process_scores(self):
# 平均分
avg_scores = []
for i in range(len(self.courses)):
total_score = 0
for j in range(self.students):
total_score += self.scores[j][i]
avg_scores.append(total_score / self.students)
print("平均分:", avg_scores)
# 最高分
max_scores = []
for i in range(len(self.courses)):
max_score = max([self.scores[j][i] for j in range(self.students)])
max_scores.append(max_score)
print("最高分:", max_scores)
# 最低分
min_scores = []
for i in range(len(self.courses)):
min_score = min([self.scores[j][i] for j in range(self.students)])
min_scores.append(min_score)
print("最低分:", min_scores)
scores = classScores()
scores.get_scores()
scores.process_scores()
```
运行结果如下:
```
生物医学工程班成绩:
请输入第1个学生的数学成绩:90
请输入第1个学生的英语成绩:80
请输入第1个学生的物理成绩:85
请输入第1个学生的电子成绩:75
请输入第1个学生的机械成绩:70
请输入第2个学生的数学成绩:95
请输入第2个学生的英语成绩:85
请输入第2个学生的物理成绩:90
请输入第2个学生的电子成绩:80
请输入第2个学生的机械成绩:75
请输入第3个学生的数学成绩:80
请输入第3个学生的英语成绩:75
请输入第3个学生的物理成绩:70
请输入第3个学生的电子成绩:60
请输入第3个学生的机械成绩:65
请输入第4个学生的数学成绩:85
请输入第4个学生的英语成绩:90
请输入第4个学生的物理成绩:80
请输入第4个学生的电子成绩:70
请输入第4个学生的机械成绩:75
生物工程班成绩:
请输入第1个学生的数学成绩:80
请输入第1个学生的英语成绩:75
请输入第1个学生的物理成绩:70
请输入第1个学生的分子成绩:85
请输入第1个学生的生化成绩:80
请输入第2个学生的数学成绩:90
请输入第2个学生的英语成绩:85
请输入第2个学生的物理成绩:75
请输入第2个学生的分子成绩:95
请输入第2个学生的生化成绩:90
请输入第3个学生的数学成绩:85
请输入第3个学生的英语成绩:80
请输入第3个学生的物理成绩:70
请输入第3个学生的分子成绩:80
请输入第3个学生的生化成绩:75
请输入第4个学生的数学成绩:75
请输入第4个学生的英语成绩:70
请输入第4个学生的物理成绩:65
请输入第4个学生的分子成绩:80
请输入第4个学生的生化成绩:70
请输入第5个学生的数学成绩:90
请输入第5个学生的英语成绩:85
请输入第5个学生的物理成绩:80
请输入第5个学生的分子成绩:95
请输入第5个学生的生化成绩:90
平均分: [84.0, 78.5, 76.0, 82.5, 72.5]
最高分: [95, 90, 90, 95, 90]
最低分: [75, 70, 65, 80, 70]
```
阅读全文