python
输入n(1
每组测试数据首先输入一个正整数n(1
如果n出现错误,出现异常。如果n输入正确,输出排序后的学生信息,每行一个学生信息:学号、姓名、语文、数学、英语、平均成绩(保留2位小数),上面每个数据之间留一个空格。
输入样例:
在这里给出多组。例如:
3
0001 zhangsan 80 95 65
0002 lisi 65 52 56
0003 wangwu 87 86 95
输出样例:
在这里给出相应的输出,文件中与输出一样。例如:
0003 wangwu 87 86 95 89.33
0001 zhangsan 80 95 65 80.00
0002 lisi 65 52 56 57.67
chatgpt:
以下是Python3的代码实现:
def process_student_info():
try:
n = int(input())
if n <= 1 or n > 100:
raise ValueError
except ValueError:
print("输入的人数必须是数字,大于0并且小于等于100")
return
students = []
for i in range(n):
try:
student_info = input().split()
if len(student_info[0]) != 4 or not student_info[0].isdigit():
raise ValueError
name = student_info[1]
if not name.isalpha() or len(name) > 10:
raise ValueError
scores = list(map(int, student_info[2:]))
if len(scores) != 3 or not all(0 <= score <= 100 for score in scores):
raise ValueError
avg_score = sum(scores) / 3
students.append((student_info[0], name, scores[0], scores[1], scores[2], avg_score))
except ValueError:
print("第{}个学生信息有误".format(i+1))
return
students = sorted(students, key=lambda s: (-s[5], -s[2]))
for student in students:
print("{} {} {} {} {} {:.2f}".format(student[0], student[1], student[2], student[3], student[4], student[5]))
首先,我们通过input()函数获取输入,尝试将其转化为整数类型,并检查其是否符合要求。如果不符合,则抛出ValueError异常,并输出错误信息。
如果输入合法,则我们通过循环输入n个学生的信息,每个学生的信息由一个字符串表示,其中包含学号、姓名和3门课的成绩。我们尝试将这个字符串转化为学生信息,同时检查学号、姓名和成绩是否合法。如果不合法,则抛出ValueError异常,并输出错误信息。
如果所有学生信息都合法,则将其存储在列表中,并根据平均成绩和语文成绩进行排序。最后,我们将排序后的学生信息输出。
我引用ChatGPT作答:可以使用以下代码实现题目要求:
while True:
try:
n = input()
if not n.isdigit() or int(n) <= 1 or int(n) > 100:
raise ValueError("输入的人数必须是数字,大于0并且小于等于100")
n = int(n)
students = []
for i in range(n):
line = input().split()
if len(line) != 5:
raise ValueError("输入格式错误")
sid, name, score1, score2, score3 = line
if not sid.isdigit() or len(sid) != 4 or not name.isalpha() or not score1.isdigit() or not score2.isdigit() or not score3.isdigit():
raise ValueError("输入格式错误")
score1, score2, score3 = int(score1), int(score2), int(score3)
avg_score = round((score1 + score2 + score3) / 3, 2)
students.append((sid, name, score1, score2, score3, avg_score))
students.sort(key=lambda x: (-x[5], -x[2]))
for sid, name, score1, score2, score3, avg_score in students:
print(sid, name, score1, score2, score3, avg_score)
break
except ValueError as e:
print(e)
这个代码中,首先输入一个正整数 n,表示学生人数。如果 n 不是数字或者 n<=1 或 n>100,则会抛出异常。然后,根据输入的 n,循环读取 n 行学生信息,并将学生信息存储在一个列表中。如果输入格式不符合要求,也会抛出异常。每个学生信息都包括学号、姓名、语文、数学和英语成绩。学号为4位数字组成,成绩为整数。如果不满足这些条件,会出现异常。然后计算每个学生的平均成绩,并将学生信息按照平均成绩从高到低排序,如果平均成绩相同则按照语文成绩从高到低排序。最后输出排序后的学生信息。
运行结果如下:
python
def sort_students(n, students):
# 判断n是否合法
if not n.isdigit() or int(n) <= 1 or int(n) > 100:
print("输入的人数必须是数字,大于0并且小于等于100")
return
# 判断学生信息是否合法
for student in students:
if len(student) != 5:
print("学生信息不合法")
return
if not student[0].isdigit() or len(student[0]) != 4:
print("学号不合法")
return
if not student[1].isalpha() or len(student[1]) > 10:
print("姓名不合法")
return
for score in student[2:]:
if not score.isdigit():
print("成绩不合法")
return
# 计算平均成绩并排序
avg_scores = []
for student in students:
avg_score = sum(map(int, student[2:])) / 3
avg_scores.append((student[0], student[1], student[2], student[3], student[4], avg_score))
avg_scores.sort(key=lambda x: (-x[5], -int(x[2])))
# 输出结果
for student in avg_scores:
print(student[0], student[1], student[2], student[3], student[4], "%.2f" % student[5])
n = input()
students = []
for i in range(int(n)):
student = input().split()
students.append(student)
sort_students(n, students)