本文最后更新于 532 天前,其中的信息可能已经有所发展或是发生改变。
有5名学生,每个学生有三门课程的成绩需要记录。要求:将5名学生三门课程的成绩存入文本文件;读取文件,计算平均成绩。按平均成绩对5名学生排序。显示格式如下:
姓名 python 线性代数 算法设计与分析 平均成绩 名次
# 判断tabulate是否安装
import importlib.util
import os
if importlib.util.find_spec('tabulate') is None:
print(f"'tabulate'缺失,正在帮你安装...")
os.system(f"pip install -i https://pypi.tuna.tsinghua.edu.cn/simple tabulate")
print(f"'tabulate'安装完成")
from tabulate import tabulate
##############文件写入
Default_stu_data = {
"张三":{"python": 80,"线性代数": 90,"算法设计与分析": 75},
"李四":{"python": 85,"线性代数": 95,"算法设计与分析": 80},
"王五":{"python": 90,"线性代数": 85,"算法设计与分析": 70},
"赵六":{"python": 80,"线性代数": 90,"算法设计与分析": 85},
"陈七":{"python": 85,"线性代数": 95,"算法设计与分析": 75},
}
dataFile = open('stu_data.txt','w')
dataFile.write(str(Default_stu_data))
dataFile.close()
##############文件读取
dataFile = open('stu_data.txt','r')
stu_data = dataFile.read()
dataFile.close()
stu_data = dict(eval(stu_data))#StrToDict
##############计算平均分
for i,j in stu_data.items():
ave = 0
for k,v in j.items():
ave += v
ave /= len(j)
j['ave'] = ave
##############平均分排序
afterSort = sorted(stu_data.items(),key=lambda x: x[1]['ave'], reverse=True)
##############构造输出列表
output_list = []
rank = 1
for name, scores in afterSort:
tmpList = [name]
for i,j in scores.items():
tmpList.append(j)
tmpList.append(rank)
rank += 1
output_list.append(tmpList)
##############输出
table_header = ['姓名','python','线性代数','算法设计与分析','平均成绩','名次']
print(tabulate(output_list, headers=table_header, tablefmt='fancy_grid', floatfmt=".2f"))