输入n个学生的姓名及其3门功课成绩(整数),要求根据3门功课的平均成绩从高分到低分输出每个学生的姓名、3门功课成绩及平均成绩,若平均分相同则按姓名的字典序输出。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据首先输入一个正整数n(1<n<100),表示学生人数;然后是n行信息,分别表示学生的姓名(长度不超过10且由英文字母构成的字符串)和3门课成绩(正整数)。 输出格式: 对于每组测试,输出排序后的学生信息,每行一个学生信息:姓名、3门课成绩、平均成绩(保留2位小数)。每行数据之间留一个空格。python用类
时间: 2024-03-26 21:39:02 浏览: 273
可以使用如下的代码实现:
```python
class Student:
def __init__(self, name, score):
self.name = name
self.score = score
self.average = sum(score) / len(score)
def __lt__(self, other):
if self.average == other.average:
return self.name < other.name
return self.average > other.average
while True:
try:
n = int(input())
except:
break
students = []
for i in range(n):
name, score = input().split()
score = list(map(int, score.split(',')))
students.append(Student(name, score))
students.sort()
for student in students:
print(student.name, end=' ')
print(','.join(str(x) for x in student.score), end=' ')
print('%.2f' % student.average)
```
首先定义一个 `Student` 类,包含姓名、成绩和平均成绩三个属性。在初始化方法中,计算出成绩的平均值。为了能够使用 `sort` 方法进行排序,我们需要在类中定义一个 `__lt__` 方法,用于确定两个对象的大小关系。按照题目要求,如果平均成绩相同,则按照姓名的字典序排序。
在主程序中,首先读入学生人数 `n`,然后依次读入每个学生的姓名和成绩,并将其存储在一个列表中。最后,对列表中的学生对象进行排序,然后依次输出每个学生的信息。注意,输出时需要使用 `join` 方法将成绩列表转换为字符串,保留平均成绩时需要使用格式化字符串。
阅读全文