openpyxl模块之综合实验--------python读写excel,并完成计算平均成绩、成绩等级划分、每个同学分数大于70的次数、找最优成绩

准备好数据:

 

import numpy as np
import openpyxl

def Read_Excel(Excelname,sheet):
'''
作用:读取excel表格
load_workbook 模块读取 excel 文件中对应的"修改"表中的数据,封装为列表并返回
'''
excel = openpyxl.load_workbook(filename=Excelname, read_only=True)
# print(excel[sheet])
return excel[sheet]

# 将该同学所有的成绩列为数组输出
def get_narry(kt,sy,qm):

return list(np.array([kt,sy,qm]))

# 计算一个分数列的平均分数
def cal_avg(x):
n = len(x)
sum = 0
for i in range(0,n):
# print(x[i])
sum += x[i]
# print(sum)
return sum/n

# 每位同学考试成绩>70的次数
def totle_times(x):
n = len(x)
i=0
for i in range(0,n):
if x[i]>70:
i += 1
return i

def get_Value(wb, tag):
'''
输入:获取相应单元格的数据
wb为表格对象
tag为单元格标签
输出:对应单元格的数据
'''
return wb[tag].value

def get_Score(workbook):
'''
输入:包含学生的所有信息
输出:学生成绩数据列表
'''
# 定义存储学生数据列表
students_message = []
# 定义储存学生分数等级的列表 A为优秀 B为良好 C为不及格
minrow = workbook.min_row + 1
maxrow = workbook.max_row + 1
for i in range(minrow,maxrow):

name = get_Value(workbook, 'B' + str(i))
Id = get_Value(workbook,'A'+str(i))
time = get_Value(workbook, 'F' + str(i))
first = get_Value(workbook, 'C' + str(i))
second = get_Value(workbook, 'D' + str(i))
third = get_Value(workbook, 'E' + str(i))
n = get_narry(first,second,third)
layer = []
for x in range(len(n)):
if np.logical_or(n[x] < 0, n[x] > 100):
print("the exist score")
elif n[x] >= 70:
layer.append('A')
elif 50 <= n[x] < 70:
layer.append('B')
else:
layer.append('C')
avg_score = cal_avg(n)
max_score = np.max(n)
times = totle_times(n)
students_message.append({
'学号':Id,
'姓名': name,
'第一次成绩': first,
'第二次成绩':second,
'第三次成绩':third,
'时间': time.date().strftime('%Y-%m-%d'),
'等级划分':layer,
'平均成绩':round(avg_score,2), # round可以将输出保留两位小数
'最优成绩':max_score,
'分数大于70次数':times
})
# print(layer)
return students_message

if __name__ == '__main__':
test = Read_Excel('D:/pycharm/arithmetic/1.xlsx', 'test')
Students_messages = get_Score(test)
for Students_message in Students_messages:
print(Students_message)

 

posted @ 2023-07-25 14:56  往事已成昨天  阅读(144)  评论(0编辑  收藏  举报