输入n个学生的姓名及其3门功课成绩(整数),要求根据3门功课的平均成绩从高分到低分输出每个学生的姓名、3门功课成绩及平均成绩,若平均分相同则按姓名的字典序输出。 输入格式: 测试数据有多组,处理到文件尾。每组测试数据首先输入一个正整数n(1<n<100),表示学生人数;然后是n行信息,分别表示学生的姓名(长度不超过10且由英文字母构成的字符串)和3门课成绩(正整数)。 输出格式: 对于每组测试,输出排序后的学生信息,每行一个学生信息:姓名、3门课成绩、平均成绩(保留2位小数)。每行数据之间留一个空格。python
时间: 2024-03-26 21:38:49 浏览: 61
以下是Python代码实现:
```python
while True:
try:
n = int(input())
except:
break
data = []
for i in range(n):
s = input().split()
name, score = s[0], list(map(int, s[1:]))
avg_score = sum(score) / 3
data.append((name, score, avg_score))
data = sorted(data, key=lambda x: (-x[2], x[0]))
for d in data:
print(d[0], end=' ')
for s in d[1]:
print(s, end=' ')
print('%.2f' % d[2])
```
首先使用一个 while 循环读入多组测试数据。每组测试数据首先读入一个正整数 n,表示学生人数。然后使用一个 for 循环读入 n 行信息,分别表示一个学生的姓名和 3 门课成绩。使用 split 函数将每行输入按空格分割,然后将第一个元素作为姓名,将剩余的三个元素使用 map 函数转换成整数后作为课程成绩,计算平均成绩并将姓名、成绩和平均成绩作为一个元组添加到列表 data 中。
使用 sorted 函数对 data 列表进行排序,排序规则是先按照平均成绩从高到低降序排序,如果平均成绩相同,则按姓名的字典序升序排序。
最后使用一个 for 循环遍历排好序的 data 列表,并将每个学生的姓名、成绩和平均成绩输出,格式化输出平均成绩保留 2 位小数。
阅读全文