总体思路:把接口明确地告诉学生(本文后面的代码要求学生程序中必须有个函数叫做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))

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

  1. python socket编程 实现简单p2p聊天程序

    转载自:https://www.cnblogs.com/wuxie1989/p/7204887.html python socket编程 实现简单p2p聊天程序 目标是写一个python的p2p聊天的 ...

  2. 小学生python游戏编程arcade----敌人自动面向角色并开火

    小学生python游戏编程arcade----敌人自动面向角色并开火 前言 敌人自动攻击角色的实现 1. 1.1 计算角度,使用敌人面向角色 1.2 自动生成各色子弹,不是通过调用图片 1.3 控制敌 ...

  3. python编写统计选票的程序_使用python编写微信公众号发稿统计程序

    近日为学校公众号统计发稿情况,需统计本年度各部门分别所发稿件标题.时间.作者等. 首先考虑查看公众号后台有无统计功能,看到的界面如下: 每页只显示7天的消息,且没有部门作者信息.再看另一界面: 只统计 ...

  4. Python编写无界面版打字练习程序

    开学第一课:一定不要这样问老师Python问题 在线开放课程"Python程序设计基础"第7次开课通知 智慧树大学共享课"Python数据分析与数据可视化"20 ...

  5. 用python编写一个掷骰子的小程序

    摘要: 编写了一个掷骰子的程序,主要通过pygame模块实现了以下几点功能:1.每次点击开始键时,骰子都会转动起来.2.每次开始后点击停止键时,骰子停止并且随机停在1-6的某一个数字上.3.按下结束键 ...

  6. QQ批量自动登录程序的设计

    因为自己的QQ号码有好几个,每次重启机子的时候一个一个的登录超级麻烦,而且腾讯老是在偶尔的时候,再把以前已经记住密码的QQ密码给置空,还要重新输入,太麻烦,因此尝试着自己搞一个批量自动登录的程序 以T ...

  7. 西门子300系列基本逻辑编程:手自动选择程序及自定义脉冲模块的使用

    西门子内置脉冲发生器: M0.0 0.1S, M0.1 0.2S, M0.2 0.4S, M0.3 0.5S, M0.4 0.8S, M0.5 1.0S, M0.6 1.6S, M0.7 2.0S. ...

  8. 用python编写一个处理报文的小程序

    最近用python编写了一个处理报文的小程序,最后保存成.txt格式. 主要内容非常简单,介绍如下: 1.报文内容如下所示,比较乱,因为要输入到matalab中进行仿真验证,因此,需要将里面的'\n' ...

  9. Python 根据Excel数据源批量自动填写Excel模板

    Python 根据Excel数据源批量填写Excel模板 #!/usr/bin/env python3 # -*- coding: utf-8 -*-import xlwt from xlutils. ...

最新文章

  1. 院士张钹:AI奇迹短期难再现 深度学习技术潜力已近天花板
  2. 第4章 最基础的分类算法-k近邻算法
  3. 对话阿里云:解锁视频云的新技术、新场景
  4. stl中Priority Queues(优先队列)的基本用法
  5. [7] ADB 模拟按键/输入
  6. python辗转相除法求最小公倍数_Python实现利用最大公约数求三个正整数的最小公倍数示例...
  7. Effective C# 原则8:确保0对于值类型数据是有效的(翻译)
  8. Java 线程实时读取日志文件
  9. 耗时两个礼拜,8000字安卓面试长文,重难点整理
  10. 虚拟机中标麒麟的网络设置
  11. godot读写本地文件
  12. delphi xe 之路(14)使用FireMonkeyStyle
  13. Echarts实现数据可视化大屏
  14. HDU 6184 Counting Stars 经典三元环计数
  15. 修改Console口登录密码
  16. HTML+CSS网页设计期末课程大作——XXXXX (X页) HTML5网页设计成品_学生DW静态网页设计_web课程设计网页制作
  17. Alex Woodie:2019大数据预测
  18. Cows(树状数组)
  19. Nacos Discovery教程
  20. 【2023武汉理工考研】 三亚海南专项概况 初试复试分数

热门文章

  1. mono linux 运行机制,linux – Mono如何神奇?
  2. 东北大学c语言编程尸体,东北大学c语言编程试题及其答案
  3. 微信服务号+支付+php,微信服务号发送营销红包给关注用户步骤及部分php代码
  4. 微信推送封面尺寸_48张微信朋友圈个性封面图片大全 让来看你朋友圈的人眼前一亮!...
  5. mysql建用户之后取消drop库权限
  6. java中prepend的用法_jQuery中prepend()方法用法实例
  7. 玩转springboot2.x之自定义项目内自动配置
  8. 解决Android学习之ScollView嵌套ListView和GridView问题
  9. matlab mcc 安装,matlab中安装mcc
  10. php任务奖励体系,phpwind7.5完备的积分体系