我想比较学生对模型答案的回答。学生对多项选择题进行测试。总共有5个问题,每个问题有3个多项选择。 学生为所有问题选择以下选项:“12231”。例如:对于Q(1):学生选择选项“1”,对于Q(2):学生选择选项“2”......等。 现在,我需要通过将其与模型答案“12132”进行比较来计算学生的总分。这名学生获得了3/5的分数。 学生的答案总是和模特一样长。例如学生不会跳过任何问题。
我需要做同样的事情,但有数百名学生。我能用代码吗?我只能想到使用for循环并迭代学生答案,但我想不出一种方法来比较两者并计算学生的分数。
答案 0 :(得分:1)
如果您的问题以"在同一位置的另一个___结束",答案几乎总是zip
。
如果您zip
将两个字符串组合在一起,例如学生的答案和答案键,您将得到一对可迭代的对:学生的第一个答案和答案密钥' s第一个答案,然后是第二个答案,依此类推。
所以,如果你想计算一个学生正确的答案数量,你只需要使用zip
语句或理解来循环for
。例如:
score = sum(student==correct for student, correct in zip(student_answers, answer_key))
这使用了一些额外的技巧:如果总结一堆布尔值,则True值计为1,而False值计为0.但是,除此之外,没有什么比循环{{{ 1}}。
如果你想在学生名单中为每个学生的答案做这个,那就是围绕这个答案的另一个循环。例如:
zip
或者,如果你想要超简洁:
all_student_scores = []
for student_answers in all_student_answers:
score = sum(student==correct for student, correct in zip(student_answers, answer_key)
all_student_scores.append(score)
答案 1 :(得分:0)
您可以使用distance包 - 它提供hamming distance计算器:
import distance
distance.hamming("12231", "22131")
现在,如果您有学生答案(str)和模型的列表,您可以这样做:
def score(student_answers,model):
return len(model)-[distance.hamming(ans,model) for ans in student_answers]