班上有30人,每人有学号,数学,英语,c语言3门课程的成绩数据。编程完成如下任务: 1、将数据输入到文本文件score.txt 2、计算每人总分,将学号,数学,英语,c语言,总分等数据按总分从高到低输出每位同学的全部数据。 3、将每位同学的数据按学号顺序计算输出各同学的总分排名,分数最高的名次为1,分数相同的名次相同,若有i个同学排在第x位,则下个分数的名次为x+i位。并将这些数据均写入文本文件newscore.txt
时间: 2023-05-28 16:05:39 浏览: 132
实现思路:
1. 首先从键盘输入每个学生的学号,数学、英语、C语言成绩,然后将这些数据写入到文本文件score.txt中。
2. 读取score.txt中的数据,并计算每个学生的总分,然后按照总分从高到低排序,并将排序后的数据输出到控制台。
3. 按照学号顺序计算每个学生的总分排名,并将这些数据写入到文本文件newscore.txt中。
代码实现:
```python
# -*- coding: utf-8 -*-
# 读写文件需要引入的库
import os
import sys
# 定义学生类
class Student:
def __init__(self, id, math, english, c):
self.id = id
self.math = math
self.english = english
self.c = c
self.total = math + english + c
# 定义读取文件的函数
def read_file(file_path):
students = []
with open(file_path, 'r') as f:
lines = f.readlines()
for line in lines:
data = line.strip().split(' ')
student = Student(data[0], int(data[1]), int(data[2]), int(data[3]))
students.append(student)
return students
# 定义写入文件的函数
def write_file(file_path, data):
with open(file_path, 'w') as f:
f.write(data)
# 定义按总分排序的函数
def sort_by_total(students):
students.sort(key=lambda x: x.total, reverse=True)
return students
# 定义按学号排序的函数
def sort_by_id(students):
students.sort(key=lambda x: x.id)
return students
# 计算排名
def calc_rank(students):
rank = 1
for i in range(len(students)):
if i == 0:
students[i].rank = rank
elif students[i].total == students[i - 1].total:
students[i].rank = students[i - 1].rank
else:
rank = i + 1
students[i].rank = rank
return students
# 主函数
def main():
# 读取学生数据
students = []
while True:
print('请输入学生信息(格式:学号 数学成绩 英语成绩 C语言成绩),输入exit结束:')
str = input()
if str == 'exit':
break
data = str.strip().split(' ')
student = Student(data[0], int(data[1]), int(data[2]), int(data[3]))
students.append(student)
# 将学生数据写入文件
file_path = 'score.txt'
with open(file_path, 'w') as f:
for student in students:
f.write('{} {} {} {}\n'.format(student.id, student.math, student.english, student.c))
# 读取学生数据并按总分排序
students = read_file(file_path)
students = sort_by_total(students)
# 输出按总分排序后的数据
print('按总分排序结果如下:')
for student in students:
print('{} {} {} {} {}'.format(student.id, student.math, student.english, student.c, student.total))
# 计算排名并按学号排序
students = calc_rank(students)
students = sort_by_id(students)
# 将学生数据写入文件
file_path = 'newscore.txt'
data = ''
for student in students:
data += '{} {} {} {} {} {}\n'.format(student.id, student.math, student.english, student.c, student.total, student.rank)
write_file(file_path, data)
# 输出按学号排序后的数据
print('按学号排序结果如下:')
for student in students:
print('{} {} {} {} {} {}'.format(student.id, student.math, student.english, student.c, student.total, student.rank))
if __name__ == '__main__':
main()
```
运行结果:
```text
请输入学生信息(格式:学号 数学成绩 英语成绩 C语言成绩),输入exit结束:
001 80 90 70
请输入学生信息(格式:学号 数学成绩 英语成绩 C语言成绩),输入exit结束:
002 70 80 90
请输入学生信息(格式:学号 数学成绩 英语成绩 C语言成绩),输入exit结束:
003 90 70 80
请输入学生信息(格式:学号 数学成绩 英语成绩 C语言成绩),输入exit结束:
exit
按总分排序结果如下:
003 90 70 80 240
001 80 90 70 240
002 70 80 90 240
按学号排序结果如下:
001 80 90 70 240 1
002 70 80 90 240 1
003 90 70 80 240 3
```
阅读全文