1.有5个学生,每个学生有学号、姓名、数学成绩、语文成绩、英语成绩。从键盘输入以上数据,计算出每位同学三门功课的平均成绩,将原有数据和计算出的平均分数以下图的格式放在成绩原始文件stud.txt中。 2. 将上题stud.txt文件中的学生数据按平均分进行降序排序处理,将已排序的学生数据存入一个新文件学生成绩文件stu_sort.txt中。 3. 对上题已排序的学生成绩文件stu_sort.txt进行插入处理。插入一个学生的相关数据。程序先计算新插入学生的平均成绩,然后将它按成绩从高到低顺序插入学生成绩文件stu_sort.txt中(要求更新原有文件)。
时间: 2024-04-03 07:32:48 浏览: 105
好的,以下是每个问题的解答:
1. 代码如下:
```python
# 定义一个列表用来存储学生的信息
students = []
# 循环5次,从键盘输入每个学生的信息
for i in range(5):
# 从键盘输入学生的信息
id = input('请输入学号:')
name = input('请输入姓名:')
math_score = float(input('请输入数学成绩:'))
chinese_score = float(input('请输入语文成绩:'))
english_score = float(input('请输入英语成绩:'))
# 计算每个学生的平均成绩
avg_score = (math_score + chinese_score + english_score) / 3
# 存储每个学生的信息和平均成绩
student = {'id': id, 'name': name, 'math_score': math_score, 'chinese_score': chinese_score, 'english_score': english_score, 'avg_score': avg_score}
students.append(student)
# 将学生信息写入文件
with open('stud.txt', 'w') as f:
# 写入表头
f.write('学号\t姓名\t数学成绩\t语文成绩\t英语成绩\t平均成绩\n')
# 循环写入每个学生的信息
for student in students:
f.write(student['id'] + '\t' + student['name'] + '\t' + str(student['math_score']) + '\t' + str(student['chinese_score']) + '\t' + str(student['english_score']) + '\t' + str(student['avg_score']) + '\n')
```
2. 代码如下:
```python
# 读取学生信息文件
with open('stud.txt', 'r') as f:
# 跳过表头
f.readline()
# 读取每个学生的信息并存储到列表中
students = []
for line in f.readlines():
fields = line.strip().split('\t')
student = {'id': fields[0], 'name': fields[1], 'math_score': float(fields[2]), 'chinese_score': float(fields[3]), 'english_score': float(fields[4]), 'avg_score': float(fields[5])}
students.append(student)
# 按平均分进行降序排序
students_sorted = sorted(students, key=lambda x:x['avg_score'], reverse=True)
# 将排序后的学生信息写入文件
with open('stu_sort.txt', 'w') as f:
# 写入表头
f.write('学号\t姓名\t数学成绩\t语文成绩\t英语成绩\t平均成绩\n')
# 循环写入每个学生的信息
for student in students_sorted:
f.write(student['id'] + '\t' + student['name'] + '\t' + str(student['math_score']) + '\t' + str(student['chinese_score']) + '\t' + str(student['english_score']) + '\t' + str(student['avg_score']) + '\n')
```
3. 代码如下:
```python
# 从键盘输入新学生的信息
id = input('请输入学号:')
name = input('请输入姓名:')
math_score = float(input('请输入数学成绩:'))
chinese_score = float(input('请输入语文成绩:'))
english_score = float(input('请输入英语成绩:'))
# 计算新学生的平均成绩
avg_score = (math_score + chinese_score + english_score) / 3
# 读取已排序的学生信息文件
with open('stu_sort.txt', 'r') as f:
# 跳过表头
f.readline()
# 读取每个学生的信息并存储到列表中
students = []
for line in f.readlines():
fields = line.strip().split('\t')
student = {'id': fields[0], 'name': fields[1], 'math_score': float(fields[2]), 'chinese_score': float(fields[3]), 'english_score': float(fields[4]), 'avg_score': float(fields[5])}
students.append(student)
# 将新学生信息插入到已排序的学生列表中
new_student = {'id': id, 'name': name, 'math_score': math_score, 'chinese_score': chinese_score, 'english_score': english_score, 'avg_score': avg_score}
students.append(new_student)
students_sorted = sorted(students, key=lambda x:x['avg_score'], reverse=True)
# 将排序后的学生信息写入文件
with open('stu_sort.txt', 'w') as f:
# 写入表头
f.write('学号\t姓名\t数学成绩\t语文成绩\t英语成绩\t平均成绩\n')
# 循环写入每个学生的信息
for student in students_sorted:
f.write(student['id'] + '\t' + student['name'] + '\t' + str(student['math_score']) + '\t' + str(student['chinese_score']) + '\t' + str(student['english_score']) + '\t' + str(student['avg_score']) + '\n')
```
注意:在第三个问题中,新学生的信息会被插入到已排序的学生列表中,并且重新排序后再写入文件,所以原有文件会被更新。
阅读全文