文件中的成绩统计分析----Python
文件中的成绩统计分析
描述
现在一个包含若干学生学习成绩的文件,每位同学有4 门课程的成绩,按要求完成以下任务。
文件中每行数据格式如下:
0121801101266,刘雯,92,73,72,64
0121801101077,张佳喜,81,97,61,98
…
0121801101531,佘玉龙,73,89,81,93
读取附件文件中的数据,对数据进行处理,计算每个同学 4 门课程成绩的平均成绩,将平均成绩置于课程成绩后一列,按照平均分升序排序后输出。
根据以下输入要求,输出相应的数据:
1.输出平均分最高的同学名字与平均成绩,名字与分数间用一个空格分隔;
2.输出平均分最低的同学名字与平均成绩,名字与分数间用一个空格分隔;
3.输出按平均分从低到高的排序数据,要求每个数据之间以空格间隔,每行结尾无空格。
4.输入一个学生的名字,输出该名同学所在行的的全部数据,各数据项间用一个空格分隔,结尾无空格;
5.如输入的姓名在文件中不存在,输出 '姓名不存在'
# 读取文件,将读取到的字符串,按逗号分割,形成一个新的列表并返回
def read(filename):
with open(filename, 'r', encoding='utf-8') as fr:
score_lst = []
for line in fr:
score_lst.append(line.strip().split(',')) # line.strip()去掉换行符,去掉换行符后变成了字符串
return score_lst
# 计算平均数并添加到列表中,返回包含平均数的新列表
def score_add_avg(score_lst):
score_avg_lst = []
for x in score_lst:
avg = sum(map(int, x[2:])) / len(x[2:])
x.append(avg)
score_avg_lst.append(x) # 将加了平均成绩的0列表加到新的列表
return score_avg_lst
# 将列表按照平均数的大小从低到高排序
def sort_score(sort_lst):
sort_lst.sort(key=lambda x: x[6])
return sort_lst
# 3.输出按平均分从低到高的排序数据,要求每个数据之间以空格间隔,每行结尾无空格。
def output_all(sort_lst):
for score in sort_lst:
print(*score) # *号进行解包
# 4.输入一个学生的名字,输出该名同学所在行的的全部数据,各数据项间用一个空格分隔,结尾无空格;
def query_studeng(sort_lst, stu_name):
for line in sort_lst:
if stu_name in line:
return line
else:
return None
score = read('6.5 score.txt')
score_with_avg = score_add_avg(score)
sorted_score = sort_score(score_with_avg)
print(sorted_score)
# 1.输出平均分最高的同学名字与平均成绩,名字与分数间用一个空格分隔;
print(sorted_score[-1][1], sorted_score[-1][6])
# 2.输出平均分最低的同学名字与平均成绩,名字与分数间用一个空格分隔;
print(sorted_score[0][1], sorted_score[0][6])
output_all(sorted_score)
student_name = input()
info = query_studeng(sorted_score, student_name)
if info:
print(*info)
else: # 5.如输入的姓名在文件中不存在,输出 '姓名不存在'
print('姓名是不存在的')