环境和所需准备
执行这个程序需要安装以下python环境
pip install openpyxl -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
自己先写了个excel的文档,用于测试,内容如下
注意我标红的地方,可以结合代码看看,这里要记得和代码一致不然会报错,由于每个excel文件可以包含很多工作表,这为了标明我们需要的是哪个工作表
代码解读
def Read_Excel(Excelname,sheet):
'''
作用:读取excel表格
'''
excel = openpyxl.load_workbook(filename=Excelname, read_only=True)
# print(excel[sheet])
return excel[sheet]
这是定义了一个用于读取excel表格的函数,但是并不能够直接像excel一样可查看该文件,load_workbook 模块读取 excel 文件中对应的"修改"表中的数据,封装为列表并返回。
# 将该同学所有的成绩列为数组输出
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
这一步是求每位同学考试成绩>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)
运行结果
觉得有用点赞支持一下❤