题目
某阅卷系统设计如下:
读取学生答案文件后和标准答案进行对照并判分,题型分为单选、多选和填空。
单选阅卷规则:和标准答案一致得全部分数,错选或不选不给分
多选阅卷规则:和标准答案一致得全部分数,漏选给一半分数,错选或不选不给分
填空阅卷规则:标准答案表中允许有多种答案存在。学生的答案在标准答案中存在,得全部分数,不存在或未填不给分。
例如"学生答案.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 分
(1)
如果学生的答案数据为'王五|A|C|AD|ACD|string|i=0',则输出的结果是。
(2)
请在横线处填入合适的代码。
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(
)
答案: 【1】王五 成绩: 5 分
【1】i not in s2 或 not i in s2 或 i in s2 ==False【2】s1=="" or flag==False【3】zf+dx(studa[i+1],bzda[p+1],bzda[p+2])或 zf+dx(studa[i+1],bzda[3*i+1],bzda[3*i+2])