文件读写与表格自动统计(复杂未完善版)
1.实现下列表格数据生成(注:初始文件仅具备姓名、科目及对应成绩 21×4)
fr = open("ExamScore.csv", "r")
ls = []
for line in fr:
line = line.replace("\n","")
ls.append(line.split(","))
i = 1
while i < 21:
Sum = 0.0
j = 1
while j < 4:
Sum += int(ls[i][j])
j += 1
ls[i].append(str(Sum))
ls[i].append(str("{:.1f}".format(Sum/3)))
i += 1
fr.close()
#加行
ls.append([])
ls.append([])
ls.append([])
ls[i].append("科均值")
ls[i+1].append("科中值")
ls[i+2].append("标准差")
#求科均值并输入
i = 1
while i < 4:
Sum = 0.0
j = 1
while j < 21:
Sum += float(ls[j][i])
j += 1
ls[21].append(str("{:.1f}".format(Sum/20)))
i += 1
#排序
ls2=[]
j=1
while j < 21:
ls2.append(ls[j][4])
j += 1
ls2.sort()
ls3=set(ls2)
number = {}
value = len(ls3)
for key in ls2:
if key not in number.keys():
number[key] = value
value -= 1
i = 1
while i < 21:
if ls[i][4] in number.keys():
ls[i].append(str(number[ls[i][4]]))
i += 1
#求科中值并输入
import math
i = 1
while i < 4:
ls1=[]
median_value=0.0
j = 1
while j < 21:
ls1.append(ls[j][i])
j += 1
ls1.sort()
median_value = (float(ls1[9])+float(ls1[10]))/2.0
ls[22].append(str("{:.1f}".format(median_value)))
i += 1
#求标准差并输入
i = 1
while i < 4:
Sum = 0.0
j = 1
while j < 21:
Sum += float(ls[j][i])
j += 1
average = Sum/20
j1 = 1
Sum1=0.0
while j1 < 21:
Sum1 += (float(ls[j][i])-average)**2
j1 += 1
Standard_deviation = math.sqrt(Sum1/20)
ls[23].append(str("{:f}".format(Standard_deviation)))
i += 1
ls[0].append("总分")
ls[0].append("平均")
ls[0].append("排序")
fw = open("ExamScore.csv", "w")
for row in ls:
print(row)
fw.write(",".join(row) + "\n")
fw.close()