Причина ошибки в том, что вы пытаетесь, как говорится в сообщении об ошибке, получить доступ к той части списка, которая в данный момент находится вне диапазона.
Например, предположим, что вы создаете список из 10 человек и пытаетесь указать, кто будет 11-м человеком в этом списке. На вашей бумажной подкладке может быть просто освободить место для другого человека, но объекты времени выполнения, такие как список в python, не так уж просты.
Ваш список начинается пустым из-за этого:
a = []
затем вы добавляете к нему 2 элемента с этим кодом:
a.append(3)
a.append(7)
это делает размер списка достаточно большим, чтобы вместить 2 элемента, два из которых вы добавили, с индексами 0 и 1 (списки python основаны на 0).
В своем коде далее внизу вы указываете содержимое элемента j
, который начинается с 2, и ваш код немедленно взрывается, потому что вы пытаетесь сказать "для списка из 2 элементов, пожалуйста, сохраните следующее значение как 3-й элемент ".
Опять же, списки, подобные списку в Python, обычно не так уж просты.
Вместо этого вам придется сделать одну из двух вещей:
- В некоторых случаях вы хотите сохранить в существующий элемент или добавить новый элемент, в зависимости от того, доступен ли указанный вами индекс или нет
- В других случаях вы всегда хотите добавить новый элемент
В вашем случае вы хотите сделать nbr. 2, что означает, что вы хотите переписать эту строку кода:
a[j]=a[j-2]+(j+2)*(j+3)/2
на это:
a.append(a[j-2]+(j+2)*(j+3)/2)
Это добавит новый элемент в конец списка, который в порядке, вместо попытки присвоить новое значение элементу N + 1, где N - текущая длина списка, что не в порядке.