前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python编写编程作业批量自动打分程序的思路与实现

Python编写编程作业批量自动打分程序的思路与实现

作者头像
Python小屋屋主
发布2018-04-17 11:01:06
2.2K0
发布2018-04-17 11:01:06
举报
文章被收录于专栏:Python小屋Python小屋

总体思路:把接口明确地告诉学生(本文后面的代码要求学生程序中必须有个函数叫做searchOnede),然后学生把Python程序文件(学号_姓名.py)以任何方式提交给老师,放到同一文件夹中。下面的代码首先由老师编写一个自己认为的最佳和最优实现,然后把学生的程序文件作为模块导入并调用其中的searchOne函数,如果学生作业中没有这个函数判为0分,如果有这个函数但是执行结果与老师的不一样也是0分,如果结果正确则根据学生代码运行时间进行打分,速度越慢则分数越低。

作业自动打分代码不是通用的,因为要批改的作业内容和要求不一样,可以根据本文大概思路自行编写相应的作业批改程序。

from string import ascii_letters, digits

from random import choice

from os import listdir, rename

from os.path import splitext

from time import time

def searchOne(s):

'''函数功能:

给定任意字符串,找出其中只出现一次的字符,

如果有多个这样的字符,就全部找出。'''

# 创建空字典

d = dict()

# 遍历字符串,并分别记录每个字符的出现次数

for ch in s:

# 这里重点演示字典的get()方法

# 如果这个字符出现过,加1

# 如果这个字符第一次出现,0+1

d[ch] = d.get(ch, 0) + 1

# 列表推导式,查找所有只出现一次的字符

chs = [ch for ch, n in d.items() if n==1]

# 返回最终结果,所有只出现一次的字符

return chs

# 10个待测字符串,统计标准答案处理结果和用时

chs = ascii_letters + digits

ss = [''.join((choice(chs) for j in range(20))) for i in range(10)]

# 保存每个字符串处理结果和用时的字典

d = dict()

# 每个字符串处理N次

N = 100

for s in ss:

# 每个字符串的处理结果

d[s] = [searchOne(s), 0]

start = time()

for i in range(N):

searchOne(s)

end = time()

# 处理字符串所用时间

d[s][1] = end-start

# 遍历学生作业文件

fns = [f for f in listdir('.') if f.endswith('.py') and f!='autoStandard.py']

print(fns)

for f in fns:

t = splitext(f)

fn = 'a'+t[0]

rename(f, fn+t[1])

print(fn)

# 把学生作业程序当做模块来导入

exec('import '+fn)

# 随机选择一个字符串进行测试

s = choice(ss)

# 如果学生的函数命名不符合要求,0分

try:

r1 = eval(fn).searchOne(s)

except:

print(fn, 0)

continue

# 如果学生函数运行结果不正确,0分

if r1!=d[s][0]:

print(fn, 0)

continue

# 如果结果正确,根据运行速度评分,越快分数越高

start = time()

for i in range(N):

eval(fn).searchOne(s)

delta = time()-start

score = 100 - (delta-d[s][1])*0.7

print(fn, round(score, 1))

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-03-02,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python小屋 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档