python的开发者是谁_使用 python 查看谁没有交作业

import os

import re

# 定义当前文件夹下文件数

filenum_original = 0

# 定义当前文件夹下word文档数

filenum_doc = 0

# 定义当前文件夹下有效word文档数

filenum_validated = 0

# 定义未找到学号人数

filenum_notfound = 0

# 定义所有文档列表

filelist_doc = []

# 定义有效文档列表

filelist_validated = []

# 定义有效文档学号列表

filelist_sno = []

# 定义未找到学号列表

filelist_notfound = []

# 定义找到学号列表

filelist_found = []

# 定义学号姓名标准字典

sjkx171 = { **这里放置学号数据** }

sjkx172 = { **这里放置学号数据** }

sjkx181 = { **这里放置学号数据** }

sjkx182 = { **这里放置学号数据** }

sjkx191 = { **这里放置学号数据** }

sjkx192 = { **这里放置学号数据** }

# 将班级字典放在列表中以遍历

class17 = {'数据科学171':sjkx171,'数据科学172':sjkx172}

class18 = {'数据科学181':sjkx181,'数据科学181':sjkx182}

class19 = {'数据科学191':sjkx191,'数据科学192':sjkx192}

# 定义临时班级字典

tempClass = {}

# 定义临时班级已交实验报告学号列表

tempClassSno_found = []

# 定义临时班级未交实验报告学号列表

tempClassSno_notfound = []

# 文档学号-班级全检索模式下使用的班级名列表

fullsearchlist = []

# 全检索模式下用于去重的集合

# fullsearchset = set()

# 函数欢迎信息输出

def printInfo():

i = 0

print("\n\t欢迎使用<点我查看谁没交实验报告>程序v1.2")

print("\t当前程序更新时间:2019年12月06日")

#print("\t作者:我不是高材生")

print("\t当前已支持统计实验报告的班级如下:\n\n")

for item in (class17,class18,class19):

for name in item.keys():

print(name,end = " \t")

i += 1

if i % 4 == 0:

print("")

print("\n\n>>>如程序内置数据缺失某人,")

print(">>>将其'姓名学号'添加至程序同目录下'checklist.txt'文件内即可。")

print(">>>每行一条数据,形如'李大钊1910203317'")

print(">>>如程序内置数据多出某人,")

print(">>>将其'0姓名学号'添加至程序同目录下'checklist.txt'文件内即可。")

print(">>>每行一条数据,形如'0李大钊1910203317'")

#函数进行获取当前文件夹下文档列表

def getFileNum():

global filenum_original

global filenum_doc

global filenum_validated

# 获取所有文件列表及个数

print("\n当前在 %s 目录下\n"%os.getcwd())

filelist_original = os.listdir()

for item in filelist_original:

filenum_original += 1

print("当前文件夹下--文件数--是:",filenum_original)

# 获取word文档列表及个数

for item in filelist_original:

if re.match(".+(\.doc|\.docx)",item):

filelist_doc.append(item)

filenum_doc += 1

print("当前文件夹下--文档数--是:",filenum_doc)

#下面这个 for 循环用于识别有效文档同时获取学号列表

for item in filelist_doc:

result = re.search("((1|2)\d{9})",item)

if result:

filelist_validated.append(item)

filelist_sno.append(result.group(1))

filenum_validated += 1

print("文件夹下--有效文档数--是:",filenum_validated,"\n")

# 函数读取checklist.txt文件

def readCheck():

try:

with open("checklist.txt","r") as file:

checkdata = file.readlines()

checkdata_length = len(checkdata)

print("\n>>>checklist.txt 文件已识别,共%d行,有效数据如下:\n"%(checkdata_length))

# checklist.txt 文件数据识别算法

if checkdata:

for item in checkdata:

# 检查如果是注释,就直接跳过

# comment = 0

if (item.strip()[0] == "#") or (item.strip()[0:2] == "//"):

# comment += 1

continue

# 正则识别1或2开头的10位学号

checkdata_line = re.search("(.+)((1|2)\d{9})",item)

# 如果有某行格式匹配失败则跳过

try:

check_name = checkdata_line.group(1).strip()

check_sno = checkdata_line.group(2)

# 调用识别班级函数获取班级名

confirmedClassName = confirmClass(check_sno)

# 文件导入数据添加删除算法(如果程序内没匹配到数据,则放入新列表)

if confirmedClassName == "没找到班级":

if item.strip()[0] == "0":

print("\t\t%s\t%s 不在程序内,无需删除"%(check_name[1:],check_sno))

else:

if check_name:

tempClass[check_sno] = check_name

print("%s\t%s\t%s 已添加"%("临时班级999",check_name,check_sno))

else:

print("\t\t必须要有名字,%s 添加失败"%check_sno)

else:

for classitem in (class17,class18,class19):

if confirmedClassName in classitem.keys():

if item.strip()[0] == "0":

del classitem[confirmedClassName][check_sno]

print("%s\t%s\t%s 已删除"%(confirmedClassName,check_name[1:],check_sno))

else:

classitem[confirmedClassName][check_sno] = check_name

print("%s\t%s\t%s 已更新"%(confirmedClassName,check_name,check_sno))

except:

#print("本行数据无效")

pass

else:

print("但checklist.txt文件为空,没有数据被添加")

except:

print("\nchecklist.txt文件识别失败或不存在")

print("没有额外数据被添加进程序")

# 进行检查实验报告上交情况

def check_doc():

# global fullsearchset

# 检索所有出现的班级,并去重

for item in filelist_sno:

fullsearchlist.append(confirmClass(item))

try:

fullsearchlist.remove("没找到班级")

except:

pass

fullsearchset = set(fullsearchlist)

for item in fullsearchset:

filelist_found = []

filelist_notfound = []

# 检查已有班级的实验报告上交情况

for classitem in (class17,class18,class19):

if item in classitem.keys():

for checksno in classitem[item].keys():

if checksno in filelist_sno:

filelist_found.append(checksno)

else:

filelist_notfound.append(checksno)

# 输出程序内置班级的交与没交情况统计(此算法有问题)

print("\n\n>>>已检索到:",item)

if len(filelist_found) > len(filelist_notfound):

for item1 in (class17,class18,class19):

if item in item1.keys():

i = 0

print(">>>@还有 %d 人没有交,他们分别是:\n"%len(filelist_notfound))

for item2 in filelist_notfound:

try:

print(item1[item][item2],end = "\t")

i += 1

if i%5 == 0:

print("")

except:

#print("error_2")

pass

else:

for item1 in (class17,class18,class19):

if item in item1.keys():

i = 0

if len(filelist_found) == 0:

print(">>>@还没有人交呢")

continue

print(">>>@已经交了 %d 个人,他们分别是:\n"%len(filelist_found))

for item2 in filelist_found:

try:

print(item1[item][item2],end = "\t")

i += 1

if i%5 == 0:

print("")

except:

#print("error_3")

pass

def check2():

# 检查文件导入列表中的人是否交了实验报告

for tempsno in tempClass.keys():

if tempsno in filelist_sno:

tempClassSno_found.append(tempsno)

else:

tempClassSno_notfound.append(tempsno)

# 输出附加班级的交与没交情况统计

if tempClass:

print("\n\n>>>已检索到:文件附加数据")

if (len(tempClassSno_found) < len(tempClassSno_notfound)):

i = 0

print(">>>@还有 %d 人没有交,他们分别是:\n"%len(tempClassSno_notfound))

for sno in tempClassSno_notfound:

try:

print(tempClass[sno],end = "\t")

i += 1

if i%5 == 0:

print("")

except:

print("error_1")

else:

i = 0

if tempClass:

if len(tempClassSno_found) == 0:

print(">>>@还没有人交呢")

else:

print(">>>@已经交了 %d 人,他们分别是:\n"%len(tempClassSno_found))

for sno in tempClassSno_found:

print(tempClass[sno],end = "\t")

i += 1

if i%5 == 0:

print("")

else:

pass

# 函数识别班级

def confirmClass(sno):

# 根据学号前两位来缩小遍历范围

if sno[0:2] == "17":

for key,value in class17.items():

if sno in value.keys():

return key

elif sno[0:2] == "18":

for key,value in class18.items():

if sno in value.keys():

return key

elif sno[0:2] == "19":

for key,value in class19.items():

if sno in value.keys():

return key

else:

pass

return "没找到班级"

# 主函数

def main():

printInfo()

readCheck()

getFileNum()

check_doc()

check2()

end = input("\n\n按下回车说拜拜")

if __name__ == '__main__':

main()

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值