#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="")