输入n(1<n<=100)个学生的信息,包括学号、姓名、语文、数学和英语。学号为4位数字组成,成绩为整数,如果不满足此条件,出现异常,如果输入的n不是数字或者 n<=1或n>100,出现异常,输出“输入的人数必须是数字,大于0并且小于等于100”。要求根据3门功课的平均成绩从高分到低分输出每个学生的学号、姓名、3门功课成绩及平均成绩,若平均成绩相同则按语文成绩从高到低排序。 输入格式: 每组测试数据首先输入一个正整数n(1<n<=100),表示学生人数;然后是n行信息,分别表示学生的学号、姓名(长度不超过10且由英文字母构成的字符串)和3门课成绩(正整数)。 输出格式: 如果n出现错误,出现异常。如果n输入正确,输出排序后的学生信息,每行一个学生信息:学号、姓名、语文、数学、英语、平均成绩(保留2位小数),上面每个数据之间留一个空格。
时间: 2023-06-14 12:03:45 浏览: 1694
以下是一个Python实现的例子:
```python
try:
n = int(input())
if n <= 1 or n > 100:
raise ValueError
except ValueError:
print("输入的人数必须是数字,大于0并且小于等于100")
else:
students = []
for i in range(n):
try:
info = input().split()
if len(info) != 5:
raise ValueError
sid, name, chinese, math, english = info
sid = int(sid)
name = str(name)
chinese = int(chinese)
math = int(math)
english = int(english)
if not (1000 <= sid <= 9999 and 0 <= chinese <= 100 and 0 <= math <= 100 and 0 <= english <= 100):
raise ValueError
except ValueError:
print("输入的信息不符合要求")
break
else:
avg = (chinese + math + english) / 3
students.append((sid, name, chinese, math, english, avg))
students.sort(key=lambda x: (-x[5], -x[2]))
for student in students:
print("%d %s %d %d %d %.2f" % student)
```
实现思路:
1. 首先尝试将输入的n转换为整数;
2. 如果n的值不符合要求,则抛出ValueError异常;
3. 否则,循环n次,每次读入一行学生信息,并尝试将其解析为学号、姓名、语文、数学和英语五个字段;
4. 如果解析失败,则抛出ValueError异常;
5. 否则,将学生信息存入一个列表中,并计算该学生的平均成绩;
6. 对学生列表进行排序,排序规则为先按平均成绩从高到低排序,如果平均成绩相同,则按语文成绩从高到低排序;
7. 遍历排序后的学生列表,输出每个学生的信息。
阅读全文