读取学生答案文件后和标准答案进行对照并判分,题型分为单选、多选和填空。
单选阅卷规则:和标准答案一致得全部分数,错选或不选不给分
多选阅卷规则:和标准答案一致得全部分数,漏选给一半分数,错选或不选不给分
填空阅卷规则:标准答案表中允许有多种答案存在。学生的答案在标准答案中存在,得全部分数,不存在或未填不给分。
例如"学生答案.txt"内容如下:
张三|A|D|AC|AD|字符串|
李四|A|D|ACD|A|string|i>=0
标准答案:
题号 |
1 |
2 |
3 |
4 |
5 |
6 |
题型 |
单选 |
单选 |
多选 |
多选 |
填空 |
填空 |
答案 |
A |
D |
ACD |
AD |
字符串或string |
i==0或i>=0 |
分值 |
2 |
2 |
2 |
2 |
2 |
2 |
程序执行结果:
张三 成绩: 9 分
李四 成绩: 11 分
def dx(s1,s2,n): # 对多选题进行判分
flag =True
for i in s1:
if :
flag =False
break
if s1==s2:
return n
elif :
return 0
else:
return n/2
f=open('学生答案.txt')
line=f.readline() # 按行读取学生答案.txt 文件
bzda=['单选','A',2,'单选','D',2,'多选','ACD',2,'多选','AD',2,'填空',['字符串','string'],2,'填空',['i==0','i>=0'],2]
while line:
studa=line.split('|') # 将字符串以'|'为间隔分割成成多个字符串组成的列表
zf=0
for i in range(len(studa)-1):
p=3*i
if bzda[p]=='单选': # 对单选题判分
if studa[i+1]==bzda[p+1]:
zf=zf+bzda[p+2]
elif bzda[p]=='多选': # 对多选题判分
zf=
else:
if studa[i+1]!= '' and studa[i+1] in bzda[p+1]:
zf=zf+bzda[p+2]
print(studa[0],'成绩:',zf,'分')
line=f.readline() # 读取下一行
f.close( )