龙空技术网

用python轻松解决合成考试一卷与二卷成绩

小石头62799 424

前言:

现时你们对“python中用字典录入学生各科成绩”都比较珍视,你们都想要剖析一些“python中用字典录入学生各科成绩”的相关资讯。那么小编同时在网摘上汇集了一些有关“python中用字典录入学生各科成绩””的相关文章,希望我们能喜欢,看官们一起来学习一下吧!

我是高中的一名信息技术老师,喜欢python,经常用python编写一些程序解决工作中的问题。我用python编写了一个专门解决考试成绩合成一二卷的程序,大大提高了工作效率。

有人可能要问了,合成一卷与二卷直接在电子表格里求和不就完事了?实际上不是这么回事。现在高中生实行的是3+3选科制,语数英3门主科加3门可选科,可选的科目有6科,物理化学生物政治历史地理,我们学校还有一个小语种日语,相当于有10科了。在考试的时候,可选科的考生的考号不是连续的,所以在合成二卷的时候就不好导入进去,肯定不能把二卷成绩所在列复制粘贴到一卷所在列的旁边,因为一卷所在列是所有考生按照考号连续排列的,二卷就不是。那么用Python如何解决这个问题呢,请看下面的程序。

这是导入二卷成绩后的工作表

import xlrd             #导入xlrd库from xlutils.copy import copywb=xlrd.open_workbook('3模.xls') #打开'3模.xls'name=input('请输入学科名称:')num=int(input(f'{name}输入二卷成绩放在第几列:'))-1wb1=xlrd.open_workbook(f'{name}二卷.xls')   #打开存放二卷成绩的文档‘XX二卷.xls’ws1=wb1.sheet_by_index(0)  #获取二卷文档的第一个工作表ws=wb.sheet_by_index(0)   #获取‘3模.xls’文档的第一个工作表nwb=copy(wb)                    #复制‘3模.xls’工作簿nws=nwb.get_sheet(0)       #获取复制的‘3模.xls’文档的第一个工作表r=0;n=0l1=ws.col_values(0)[1:]         #l1存放第一列从第2行开始的数据print(ws.nrows)                 #查看‘第一个工作表的总行数print(ws1.nrows)                #查看二卷文档的第一个工作表的总行数l2=[]while n<ws1.nrows-1:    n += 1    key = ws1.cell_value(n,0)     #key变量存放学生的考号,考号在工作表第一列    val=ws1.cell_value(n,2)        #val存放学生的成绩,成绩在第三列    if float(val)>=100:        print(key,val)    l2+=[(key,val)]        #每名学生的考号与成绩组成元组存放在l2列表中d1=dict.fromkeys(l1,[])     #生成一个键为考号,键值为[]空列表的字典d2=dict(l2)                 #将l2列表转换成字典d1.update(d2)               #字典d2更新d1字典,有键值的为二卷成绩,没有的为[]nws.write(0,num,f'{name}二卷')    #写入存放二卷所在列的表头‘xx二卷’i=0for k in d1:    i += 1    nws.write(i,num,d1[k])  #循环写入二卷的学生成绩,键值为[]的一并写入,单元格显示为空nwb.save("3模.xls")      #保存为原文件名字,等于在原工作表里修改数据

二卷文档的名称都用“XX二卷.xls”,且第一个工作表第三列存放二卷成绩,前2列是考号与姓名。运行程序的时候会提示输入科目名称,然后输入二卷成绩存放在第几列,这个数值就是从左边往右数第几列。程序运行完后就看到二卷成绩按照考号匹配导入进去了。

标签: #python中用字典录入学生各科成绩