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))
Python编写编程作业批量自动打分程序的思路与实现相关推荐
- python socket编程 实现简单p2p聊天程序
转载自:https://www.cnblogs.com/wuxie1989/p/7204887.html python socket编程 实现简单p2p聊天程序 目标是写一个python的p2p聊天的 ...
- 小学生python游戏编程arcade----敌人自动面向角色并开火
小学生python游戏编程arcade----敌人自动面向角色并开火 前言 敌人自动攻击角色的实现 1. 1.1 计算角度,使用敌人面向角色 1.2 自动生成各色子弹,不是通过调用图片 1.3 控制敌 ...
- python编写统计选票的程序_使用python编写微信公众号发稿统计程序
近日为学校公众号统计发稿情况,需统计本年度各部门分别所发稿件标题.时间.作者等. 首先考虑查看公众号后台有无统计功能,看到的界面如下: 每页只显示7天的消息,且没有部门作者信息.再看另一界面: 只统计 ...
- Python编写无界面版打字练习程序
开学第一课:一定不要这样问老师Python问题 在线开放课程"Python程序设计基础"第7次开课通知 智慧树大学共享课"Python数据分析与数据可视化"20 ...
- 用python编写一个掷骰子的小程序
摘要: 编写了一个掷骰子的程序,主要通过pygame模块实现了以下几点功能:1.每次点击开始键时,骰子都会转动起来.2.每次开始后点击停止键时,骰子停止并且随机停在1-6的某一个数字上.3.按下结束键 ...
- QQ批量自动登录程序的设计
因为自己的QQ号码有好几个,每次重启机子的时候一个一个的登录超级麻烦,而且腾讯老是在偶尔的时候,再把以前已经记住密码的QQ密码给置空,还要重新输入,太麻烦,因此尝试着自己搞一个批量自动登录的程序 以T ...
- 西门子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. ...
- 用python编写一个处理报文的小程序
最近用python编写了一个处理报文的小程序,最后保存成.txt格式. 主要内容非常简单,介绍如下: 1.报文内容如下所示,比较乱,因为要输入到matalab中进行仿真验证,因此,需要将里面的'\n' ...
- Python 根据Excel数据源批量自动填写Excel模板
Python 根据Excel数据源批量填写Excel模板 #!/usr/bin/env python3 # -*- coding: utf-8 -*-import xlwt from xlutils. ...
最新文章
- 院士张钹:AI奇迹短期难再现 深度学习技术潜力已近天花板
- 第4章 最基础的分类算法-k近邻算法
- 对话阿里云:解锁视频云的新技术、新场景
- stl中Priority Queues(优先队列)的基本用法
- [7] ADB 模拟按键/输入
- python辗转相除法求最小公倍数_Python实现利用最大公约数求三个正整数的最小公倍数示例...
- Effective C# 原则8:确保0对于值类型数据是有效的(翻译)
- Java 线程实时读取日志文件
- 耗时两个礼拜,8000字安卓面试长文,重难点整理
- 虚拟机中标麒麟的网络设置
- godot读写本地文件
- delphi xe 之路(14)使用FireMonkeyStyle
- Echarts实现数据可视化大屏
- HDU 6184 Counting Stars 经典三元环计数
- 修改Console口登录密码
- HTML+CSS网页设计期末课程大作——XXXXX (X页) HTML5网页设计成品_学生DW静态网页设计_web课程设计网页制作
- Alex Woodie:2019大数据预测
- Cows(树状数组)
- Nacos Discovery教程
- 【2023武汉理工考研】 三亚海南专项概况 初试复试分数
热门文章
- mono linux 运行机制,linux – Mono如何神奇?
- 东北大学c语言编程尸体,东北大学c语言编程试题及其答案
- 微信服务号+支付+php,微信服务号发送营销红包给关注用户步骤及部分php代码
- 微信推送封面尺寸_48张微信朋友圈个性封面图片大全 让来看你朋友圈的人眼前一亮!...
- mysql建用户之后取消drop库权限
- java中prepend的用法_jQuery中prepend()方法用法实例
- 玩转springboot2.x之自定义项目内自动配置
- 解决Android学习之ScollView嵌套ListView和GridView问题
- matlab mcc 安装,matlab中安装mcc
- php任务奖励体系,phpwind7.5完备的积分体系