有N个学生,每个学生的信息包括学号、姓名、性别和成绩,从键盘上输入N个学生的信息,把学生按成绩(整数)从高到低排序,若成绩一样则按照学号从小到大排序。输入第一行是学生个数,接下来每一行表示一条学生信息。 【输入形式】 第一行是整数N,表示学生人数。 接下来是N行,每一行是一个学生的信息。 【输出形式】 输出N行。每一行是一个学生的信息。各行之间按题目要求排序。
时间: 2024-03-15 18:44:09 浏览: 65
接收从键盘输入某班学生的学号、姓名、成绩,对学 生的成绩进行排序.zip
5星 · 资源好评率100%
好的,这是一个经典的排序问题。以下是一种可能的解法:
```python
n = int(input()) # 输入学生个数
students = [] # 用一个列表存储所有学生的信息
for i in range(n):
info = input().split() # 输入学生信息并拆分为列表
student = {
'id': info[0],
'name': info[1],
'gender': info[2],
'score': int(info[3])
}
students.append(student)
# 定义一个排序函数,先按成绩从高到低排序,再按学号从小到大排序
def cmp(student):
return (-student['score'], student['id'])
students.sort(key=cmp) # 对学生列表进行排序
# 输出排序后的学生信息
for student in students:
print(student['id'], student['name'], student['gender'], student['score'])
```
这段代码中,我们首先用一个列表 `students` 存储所有学生的信息。每个学生的信息是一个字典,包括学号、姓名、性别和成绩。我们通过循环输入学生信息,并把每个学生的信息转化为字典后添加到 `students` 列表中。
接着,我们定义了一个排序函数 `cmp`,该函数根据学生的成绩和学号来进行排序。注意,由于题目要求成绩从高到低排序,因此我们返回的是 `-student['score']`,表示按成绩从高到低排序。如果成绩一样,则返回 `student['id']`,表示按学号从小到大排序。最后,我们调用 `students.sort(key=cmp)` 对学生列表进行排序。
最后,我们循环输出排序后的学生信息即可。
阅读全文