python-archieve-projects/期末大作业/作业5-7.py

93 lines
2.2 KiB
Python
Executable File

# -*- 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()