谁没有交作业?
今天下午上数据库应用的课程,在路上就突然冒出这么一个想法。
交作业~~~
好几门课都有作业要交,大部分都是电子版的,特别是一些论文或报告,都是以word或pdf格式交的,发QQ或邮件,命名都有学号和姓名。
课代表收作业的时候都要检查一下,谁没有交,催一下,或者告诉老师~
当然,我们这一个小班也才50多个人,大班也才100号人,检查谁没有交作业可能花不了多少功夫。
然而,对于整个学院,或者带了很多班的老师,检查起来确实是一件很费力的功夫。
如果交大的作业形如:13091xxx_XXX,那么按文件名排序,可能还要好找些。不过就有几个特别的同学是这么交的:XXX_13091xxx,这个就尴尬了。
可以帮他们改名字,不过这估计是另一份工作了,和我今天要讨论的话题不符,我们要找到是谁没有交作业,而不是帮那些有个性的同学改名字。
我想了下,于是写了一个python,来做这份工作。
当然,大家可能对我的成品有兴趣,特别是课代表或什么的(自恋一下),不过,大部分同学可能并不是课代表,他们就对我是如何做的这个过程比较感兴趣。
- 首先,思考一下环境。那些收上来的文件是放在一个文件夹里的(可能怪异的课代表会采用其他的方法,比如按男女或者其他什么的)
- 然后,咱们要对这些文件的文件名进行分析,就要取得这些文件名
- 最后对这些文件名进行分析,取出咱们关心的学号,然后进行比对,看看有哪些同学没有交作业
Ok,这个就是大概的步骤。看我的源码
#3.py
#encoding:utf8
import os
import re
directory=raw_input("Please enter directory to traversal:")
s=range(13091250,13091260)#大家的学号,是全部的哟,一个也不能少,13091250-13091259
for root,dirs,files in os.walk(directory):#遍历目录下的所有文件
print root
for name in files:#取得文件名称,进行分析
n=re.findall(r’[w+]*(d{8})[w+]*’,name)#正则表达式找出那8个连在一起数字,即学号
if n:#找出学号,如果没有的话,那这位童鞋要么学号不是8位,要么他是采用了什么加密手段
m=int(n[0])#对取出的学号进行类型转换,变为int
if m in s:#查看该同学的学号在不在那一个大列表里
s.remove(m)#在的话,删掉,那么剩下的就是没有交作业的
print s#OVER,看看是哪些同学没有交作业
看下的的测试文件,我只选取13091250-13091259 的进行测试:
这些文件位于E:name
这些文件,极尽那些同学的想法吧
看看我的结果,是哪些同学没有交作业呢?
哦,是257和259啊,那课代表可以去找他们啦~
大家可以拿其他语言实现以下,比如java,C#,C/C++ ~