在歌手比赛时,只需将评委给出的分数交给设计好的流水线,就可以得到选手的最后得分,流水线上的第一个对象负责录入裁判给选手的分数,第二个对象负责去掉一个最高分和一个最低分,最后一个对象负责计算出平均成绩。 请根据下面各类的说明,用流水线完成分数评定系统: InputScore 类的对象负责录入分数,InputScore 类组合了DelScore 类的对象; DelScore 类的对象负责去掉一个最高分和一个最低分,DelScore类组合了 ComputerAver 类的对象; ComputerAver类的对象负责计算平均值; Line 类组合了InputScore、 DelScore 和 ComputerAver 3 个类的实例。 提示:
时间: 2024-02-22 21:56:34 浏览: 125
Java歌手比赛评委打分-按照设计好的流水线去掉一个最高分和一个最低分计算出平均成绩.docx
可以使用链式调用,使得每个对象都有一个 process() 方法,将处理后的结果传递给下一个对象,最终得到最终的平均成绩。具体实现可以参考下面的代码:
```python
class ComputerAver:
def __init__(self):
self.scores = []
def process(self, score):
self.scores.append(score)
def get_aver(self):
if len(self.scores) < 3:
return 0
return (sum(self.scores) - max(self.scores) - min(self.scores)) / (len(self.scores) - 2)
class DelScore:
def __init__(self):
self.computer = ComputerAver()
def process(self, score):
self.computer.process(score)
def get_aver(self):
return self.computer.get_aver()
class InputScore:
def __init__(self):
self.del_score = DelScore()
def process(self, score):
self.del_score.process(score)
def get_aver(self):
return self.del_score.get_aver()
class Line:
def __init__(self):
self.input_score = InputScore()
def process(self, score):
self.input_score.process(score)
def get_aver(self):
return self.input_score.get_aver()
```
使用时,可以创建一个 Line 的实例,然后调用它的 process() 方法传入每个选手的分数,最后调用 get_aver() 方法得到平均成绩。
```python
line = Line()
line.process(90)
line.process(85)
line.process(92)
print(line.get_aver()) # 输出 89.0
```
阅读全文