Возникли проблемы при сравнении двух списков

#python-3.x

#python-3.x

Вопрос:

Я хотел бы принять ввод пользователя, указав мне идентификатор. После получения идентификатора я должен проверить, соответствуют ли ответы, связанные с идентификатором, уже заданным правильным ответам. Если они это сделают, я должен напечатать » «, в противном случае » «. Это похоже на мой первый вопрос, но, к сожалению, я до сих пор не совсем понимаю проблему, я получил две разные ошибки во время моего тестирования, одна из них заключалась в том, что список находится вне диапазона, а другая — в том, что строковые индексы должны быть целыми числами. Мои правильные ответы находятся в списке, состоящем только из одного элемента, я не знаю, проще ли не иметь его в списке, а просто строку, связанную с переменной. 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="")
  

Моим ожидаемым результатом было бы поставить плюсы под правильным ответом, оставив пробелы, если они не совпадают.

Но я получаю сообщение об ошибке. Было бы очень важно, если бы кто-нибудь мог объяснить проблему при сравнении индексов и почему существует проблема.

Ответ №1:

Эти две строки не имеют особого смысла:

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

Вы назвали переменную index , но более точным именем было бы character .

Zip, вероятно, самый простой и самый питонический способ решения этой проблемы:

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

В качестве альтернативы вы можете использовать for i in range(len(line[1])): , а затем индексировать с i помощью .

Комментарии:

1. Большое спасибо, он работает с альтернативным вариантом, но я собираюсь проверить более pythonic, просто второй показался проще.

Ответ №2:

Используя это for index in line[1]: , index это элемент, существующий в line[1] , а не значение индекса.

Смотрите range , приведенный ниже код может вам помочь.

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