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

2024-04-26 17:17:06 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我需要做完全相同的事情,但是有几百个学生。我能用密码吗?我只能考虑使用for循环并迭代学生的答案,但我想不出一种方法来比较两者并计算学生的分数。你知道吗


Tags: 方法答案模型密码for选项事情学生
2条回答

任何时候当你有一个问题以“在另一个相同的位置”结尾时,答案几乎总是zip。你知道吗

如果你把两个字符串(比如学生的答案和答案键)放在一起,你会得到一对可数:学生的第一个答案和答案键的第一个答案,然后是两个第二个答案,依此类推。你知道吗

因此,如果你想计算一个学生答对了多少个答案,你只需使用for语句或理解来循环zip。例如:

score = sum(student==correct for student, correct in zip(student_answers, answer_key))

这使用了一个额外的技巧:如果将一组布尔值相加,真值将计为1,假值将计为0。但除此之外,没有什么比在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)

或者,如果你想超级简洁:

all_student_scores = [sum(student==correct for student, correct in zip(student_answers, answer_key)
                      for student_answers in all_student_answers]

您可以使用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]

相关问题 更多 >