统计学生提交作业情况

在研一上学期当了C语言课程的助教,每周老师都会布置作业,同学们会把作业打包成压缩文件上传到学院ftp,我的任务是下载同学的作业并统计提交人数,抽样检查作业。学生的压缩文件按学号(9位)、姓名、日期的格式命名,于是我想统计提交情况的任务可以用python来解决,以减轻我的工作量。

程序的基本思路是:

1、老师给我一个保存所有学生信息(学号、姓名)的excel表,我先把所有学生的学号保存到一个字典的key中,value初始化为0代表学生提交的次数

2、遍历提交的所有文件并取出学号,并在前面建好的字典中把对应key的value加1

3、遍历完成后,如果保存在字典中的value等于0,代表对应学号的同学没有提交作业,就把学号打印出来

当然以上方法会有误差(因为有些同学文件不按格式命名等),于是我就用以下方法检验:

在遍历文件后,我们就知道总的提交文件数目,重复提交数目,两者相减就是总的提交人数,与没提交同学相加,是否是总的学生数。如果是,代表没有提交作业的同学数目是正确的;否则,代表没有提交作业的同学数目有误,只能手工统计没有提交作业的同学。幸好,大多数情况下没有提交作业的同学数目是正确的,因此该程序还是有实际应用价值。

代码如下:

import xlrd
import os

data=xlrd.open_workbook(r'K:\工作\助教\14级C作业统计.xls') #打开excel,路径可改
table=data.sheets()[0] #得到第一个工作表
nrows=table.nrows #获取行数
map={}#保存学号及是否交作业

for i in range(nrows):
    cell=table.cell(i,1).value
    num=str(cell)[0:9]
    if num.isdigit():
        map[num]=0

fileNum=0
for filename in os.listdir(r'K:\工作\助教\20141224'):#包含学生作业的文件夹,路径可改
    fileNum+=1                                 #文件夹中文件总数
    studentID=str(filename)[0:9]               #学生作业命名方式是前面9位为学号或者后面9位为学号
    studentID2=str(filename)[-13:-4]
    if studentID in map:
        map[studentID]+=1
    if studentID2 in map:
        map[studentID2]+=1

notAdmitNum=0#没有提交人数
keys=map.keys()
print("没交:")
for key in sorted(keys):
    #print(key,map[key])
    if map[key]==0:
        print(key)
        notAdmitNum+=1

admitMoreNum=0#提交不止一次人数
print("\n提交不止一次")
for key in sorted(keys):
    if map[key]>1:
        print(key,map[key])
        admitMoreNum+=(map[key]-1)

print("\n文件夹总文件数:%d"%fileNum)
print("重复提交次数:%d"%admitMoreNum)
print("总的提交人数:%d"%(fileNum-admitMoreNum))
print("总的没交人数:%d"%notAdmitNum)









  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值