# -*- coding:utf-8 -*- import csv import matplotlib.pyplot as plt import pandas as pd import numpy as np stu = [] StuListFinal = [] with open("成绩表.csv", "r", encoding='utf-8') as file: reader = csv.reader(file) column = [row[-1] for row in reader] score = list(column) del score[0] def display(lb): print('总分分别为') for i in range(0, len(lb), 5): yield lb[i:i + 5] def cal(): print(*display(score), sep="\n") print("\n数据计算:") total, fangcha, avr = 0, 0, 0 # 平均分 for i in range(0, len(score)): total += eval(score[i]) avr = total / 60 for i in range(0, len(score)): fangcha += ((eval(score[i]) - avr) ** 2) print("所有学生最高分为{2:.2f},最低分为{3:.2f},平均分为{0:.2f},方差为{1:.2f}".format(avr, fangcha / 60, float(max(score)), float(min(score)))) #work6-7 def readcsv(): f = '成绩表.csv' s = pd.read_csv(f, usecols=[3, 4, 5, 6, 7, 8, 9]) return np.array(s) def sorta(cv): return cv[-1] StuListFinal = readcsv() def scoresAbsolute(s, stu1): TEStu = [] for stu2 in range(len(StuListFinal)): if stu2 != stu1: num = [] absSum = 0 num.append(stu2) for i in range(len(s[stu1])): absSum += abs(s[stu1][i] - s[stu2][i]) num.append(absSum) TEStu.append(num) TEStu = sorted(TEStu, key=sorta) AbSumLs = [] sum = 0 AbSumLs.append(stu1) for i in range(9): sum += TEStu[i][-1] AbSumLs.append(TEStu[i][0]) AbSumLs.append(sum) stu.append(AbSumLs) def DrawSD(listtotal): plt.style.use('ggplot') x = ['Python', 'Computer', 'Math', 'Data', 'C', 'Java', 'CalMethod'] for i in range(10): y = StuListFinal[listtotal[i]] print(StuListFinal[listtotal]) plt.scatter(x, y) plt.show() def work7(): Final = [] for i in range(len(StuListFinal)): scoresAbsolute(StuListFinal, i) SortedStuList = sorted(stu, key=sorta) for j in range(10): Final.append(SortedStuList[0][j]) DrawSD(Final) def main(): work7() cal() if __name__ == '__main__': main()