Python从键盘输入n个学生信息,包括学号、姓名、成绩。用struct方式保存到文件students.bin中,然后再将所有学生信息读取出来,并按照成绩从高到低排序,输出到屏幕上。
时间: 2023-06-20 22:06:04 浏览: 620
下面是一个简单的实现:
```python
import struct
# 结构体格式:4字节学号,20字节姓名,4字节成绩
fmt = '4s20sf'
# 从键盘输入学生信息
n = int(input("请输入学生人数:"))
students = []
for i in range(n):
id = input("请输入学号:")
name = input("请输入姓名:")
score = float(input("请输入成绩:"))
students.append((id.encode(), name.encode(), score))
# 将学生信息保存到文件
with open('students.bin', 'wb') as f:
for student in students:
f.write(struct.pack(fmt, *student))
# 从文件中读取学生信息并排序
with open('students.bin', 'rb') as f:
data = f.read()
# 每个学生信息占用28字节
size = struct.calcsize(fmt)
# 按照成绩从高到低排序
students = sorted([struct.unpack(fmt, data[i:i+size]) for i in range(0, len(data), size)], key=lambda x: x[2], reverse=True)
# 输出学生信息
print("学号\t姓名\t成绩")
for student in students:
print(f"{student[0].decode()}\t{student[1].decode().strip()}\t{student[2]:.1f}")
```
注意事项:
- 使用 `struct.pack()` 将学生信息保存到文件时,需要将学号和姓名转换为字节串。
- 使用 `struct.unpack()` 从文件中读取学生信息时,可以使用列表推导式和 `sorted()` 函数进行排序,其中 `key=lambda x: x[2]` 表示按照第三个元素(即成绩)进行排序。
阅读全文