比较两个列表时遇到问题

时间:2019-04-16 00:43:02

标签: python-3.x

我想接受用户的输入,请给我一个ID。取得ID后,我应该检查与ID相关的答案是否与已经给出的正确答案匹配。如果是这样,我应该打印一个“ +”,否则打印一个“”。 这类似于我的第一个问题,但是不幸的是我仍然没有真正理解这个问题,在整个测试过程中我遇到了两个不同的错误,其中一个是列表超出范围,另一个是字符串索引必须是整数。我的正确答案在一个仅包含一个元素的列表中,我不知道将其不包含在列表中是否更容易,而只是将一个字符串连接到变量是否更容易。 Correct_answer =“ BCCCDBBBBCDAAA”或correct_answer = [“ BCCCDBBBBCDAAA”]。另一个列表(答案)由一个长长的列表组成,具有类似以下的子列表['AB123','BXCDBBACACADBC']。在我的情况下,我输入“ AB123”作为选择。

在第三部分中进行了评论。

user_choice = input("Provide an ID")
print(correct_answer,"(a helyes megoldás)")
for line in answers:
    if user_choice == line[0]:
        for index in line[1]:
            if line[1][index] == correct_answer[index]:
                print("+", end="")
            else:
                print(" ", end="")

我的预期输出将加号放在正确答案的下面,当不匹配时留空格。

但是我得到了错误。如果有人可以在比较索引时解释问题以及为什么会有问题,这将有很多意义。

2 个答案:

答案 0 :(得分:1)

使用for index in line[1]:indexline[1]中存在的元素,而不是索引值。

参见range,下面的代码可以为您提供帮助。

for index in range(0, len(line[1])):
     if line[1][index] == correct_answer[index]:
         print("+", end="")
     else:
         print(" ", end="")

答案 1 :(得分:1)

这两行没有多大意义:

        for index in line[1]:
            if line[1][index] == correct_answer[index]:

您将变量命名为index,但更准确的名称为character

Zip可能是摆脱这种麻烦的最简单,最Python化的方法:

        for ans_ch, corr_ch in zip(line[1], correct_answer):
            if ans_ch == corr_ch:

或者,您可以使用for i in range(len(line[1])):,然后使用i进行索引。