比较字符串中的每个元素与同一位置的另一个字符串

时间:2015-05-25 06:22:17

标签: python string loops python-3.x compare

我想比较学生对模型答案的回答。学生对多项选择题进行测试。总共有5个问题,每个问题有3个多项选择。 学生为所有问题选择以下选项:“12231”。例如:对于Q(1):学生选择选项“1”,对于Q(2):学生选择选项“2”......等。 现在,我需要通过将其与模型答案“12132”进行比较来计算学生的总分。这名学生获得了3/5的分数。 学生的答案总是和模特一样长。例如学生不会跳过任何问题。

我需要做同样的事情,但有数百名学生。我能用代码吗?我只能想到使用for循环并迭代学生答案,但我想不出一种方法来比较两者并计算学生的分数。

2 个答案:

答案 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]