Python 编写程序

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位数字组成,成绩为整数。如果不满足这些条件,会出现异常。然后计算每个学生的平均成绩,并将学生信息按照平均成绩从高到低排序,如果平均成绩相同则按照语文成绩从高到低排序。最后输出排序后的学生信息。
运行结果如下:

img

该回答引用ChatGPT
题目分析:
1. 首先需要输入学生人数n,如果n不是数字或者n<=1或n>100,就会出现异常,输出“输入的人数必须是数字,大于0并且小于等于100”。
2. 然后输入n个学生的信息,包括学号、姓名、语文、数学和英语。学号为4位数字组成,成绩为整数,如果不满足此条件,出现异常。
3. 根据3门功课的平均成绩从高分到低分输出每个学生的学号、姓名、3门功课成绩及平均成绩,若平均成绩相同则按语文成绩从高到低排序。
代码实现:
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)

代码说明:
1. sort_students函数用于排序并输出学生信息。
2. 首先判断n是否合法,如果不合法就输出错误信息并返回。
3. 然后判断学生信息是否合法,如果不合法就输出错误信息并返回。
4. 计算每个学生的平均成绩,并将学生信息和平均成绩存储在一个列表中。
5. 对列表进行排序,先按平均成绩从高到低排序,如果平均成绩相同就按语文成绩从高到低排序。
6. 最后输出排序后的学生信息。
注意事项:
1. 输入的学生信息必须按照题目要求的格式输入,否则会出现异常。
2. 输出的平均成绩保留2位小数。