2014-10-23 5 views
0

Мне было поручено создать приложение Quiz для школьного проекта. Он предназначен для того, чтобы спросить у пользователя, сколько вопросов они хотят, и затем они вводят все Q & A. Как только закончите, кто-то пройдет тест.Индекс списка Python за пределами допустимого диапазона

Проблема заключается в том, что я получаю IndexError из результатов функции. Предполагается, что эта функция сравнивает тестовые ответы с ответами пользователя и распечатывает оценку.

def results(testAnswers, userAnswers): 
    score = 0 
    for i in range(0, len(answers)): 
     if testAnswers[i].lower().strip() == userAnswers[i].lower().strip(): 
      score += 1 

    print("\nResults: You got " + str(score) + " out of " + str(len(answers)) + "!") 

Кто-нибудь знает, как я могу исправить эту проблему?

+2

Пожалуйста, исправьте ваш код отступы – inspectorG4dget

+1

Как написано в этом вопросе я не думаю, что это может быть ваш фактический код, Вы можете, пожалуйста, исправить форматирование так, что она такая же, как ваша программа. – Serdalis

+1

Исправьте отступы кода. В настоящее время невозможно увидеть, что здесь происходит. –

ответ

3

Ваша проблема здесь:

while n < times: 
    if user_answers[n] == answer_list[n]: 
     score += 1 
     n += 1 
    if user_answers[n] != answer_list[n]: 
     n += 1 

Допустим, раз в 10, и п 9, он выполняет, и n+=1 делает 10. Скорее всего, у вас есть 10 элементов в массиве (обратите внимание, 10 пример), и теперь user_answers[10 вызывает исключение, так как действительные varles являются 0..9

Чтобы устранить эту проблему, используйте elif:

while n < times: 
    if user_answers[n] == answer_list[n]: 
     score += 1 
     n += 1 
    elif user_answers[n] != answer_list[n]: 
     n += 1 

Альтернативный подход, чтобы избавиться от else пункта в целом,

while n < times: 
    if user_answers[n] == answer_list[n]: 
     score += 1 
    n += 1 

Обратите внимание, что есть немало мест, которые Вы могли бы оптимизировать код, но я просто хочу, чтобы оставить ответ здесь, и пусть вам фигуру другие вещи сами.

0

Возможно, копирование кода на этот сайт пошло не так, но независимо от того, правильно ли он отформатирован, что делает его очень трудным для чтения.

Независимо от того, что вы индексируете список в точку, которая не существует. чтобы помочь отследить эту ошибку, добавьте эту строку после того, как вы начнете время цикла:

print 'n %s, times %s, user_answers %s, answer_list %s' % (n, times, user_answers, answer_list) 

затем запустить программу и вставить вывод программы на ваш вопрос (но сначала пожалуйста исправить отступы)

+0

извините за мое форматирование кода. Я очень новичок в этом сайте и, вероятно, должен внимательно прочитать инструкции, потому что я не уверен, что не так в формате, который мой код в –

0

По неизвестной причине testAnswers и userAnswers не были одинаковой длины. Урок здесь - всегда следить за тем, чтобы они были одинаковой длины.

Простой if-statment может предотвратить всю ошибку.

if len(answers) != len(userAnswers): 
    return 
Смежные вопросы