从键盘输入n个学生信息,包括学号、姓名、成绩。用struct方式保存到文件students.bin中。然后再将所有学生信息读取出来,并按照成绩从高到低排序,输出到屏幕上。python
时间: 2024-12-28 07:36:21 浏览: 13
首先,我们可以创建一个结构体(struct)来存储学生的学号、姓名和成绩。然后利用Python的`struct`模块来处理二进制文件的读写。下面是一个简单的步骤说明:
1. **定义学生结构体**:
```python
import struct
class Student:
def __init__(self, id, name, score):
self.id = id
self.name = name
self.score = score
# 使用struct.pack()将数据打包成字节
def pack_student(student):
return struct.pack('iii', student.id, student.name.encode(), student.score)
```
2. **写入学生信息到文件**:
```python
def write_students_to_file(n, students):
with open('students.bin', 'wb') as f:
for _ in range(n):
student = input(f"请输入第{n}个学生的学号、姓名和成绩 (id,name,score): ").split(',')
s_id, s_name, s_score = int(student[0]), student[1], int(student[2])
packed_data = pack_student(Student(s_id, s_name, s_score))
f.write(packed_data)
n = int(input("请输入学生数量: "))
write_students_to_file(n, [])
```
3. **从文件中读取并排序学生信息**:
```python
def read_and_sort_students():
with open('students.bin', 'rb') as f:
while True:
data = f.read(12) # 结构体大小为3*4字节(int占4字节)
if not data:
break
id, name_bytes, score = struct.unpack('iii', data)
name = name_bytes.decode()
student = Student(id, name, score)
students.append(student)
students.sort(key=lambda x: x.score, reverse=True) # 按照成绩降序排序
print("\n按成绩从高到低的学生列表:")
for student in students:
print(f"{student.name}: {student.score}")
students = []
read_and_sort_students()
```
在这个例子中,我们假设用户一次只能输入一条学生记录。运行此程序,先输入学生数量,然后依次输入每个学生的学号、姓名和成绩,最后会显示按照成绩排序的学生列表。
阅读全文