@vchelina

Прохожу курс на Stepik. Почему выдается ошибка list index out of range?

Напишите программу, на вход которой подаётся список чисел одной строкой. Программа должна для каждого элемента этого списка вывести сумму двух его соседей. Для элементов списка, являющихся крайними, одним из соседей считается элемент, находящий на противоположном конце этого списка. Например, если на вход подаётся список "1 3 5 6 10", то на выход ожидается список "13 6 9 15 7" (без кавычек).

Если на вход пришло только одно число, надо вывести его же.

Вывод должен содержать одну строку с числами нового списка, разделёнными пробелом.

Sample Input 1:

1 3 5 6 10
Sample Output 1:

13 6 9 15 7
Sample Input 2:

10
Sample Output 2:

10


Мой код:
# put your python code here
a = [int(i) for i in input().split()]
if len (a) == 1:
    print (a)
elif len (a) > 1:
    b = []
    for i in a: 
        if i == a[0]:
            b.append (a[1] + a[-1])
        elif i == a[-1]:
            b.append (a[-2] + a[0])
        else:
            b.append (a[i - 1] + a[i + 1])
print (b)


Failed test #1 of 16. Runtime error

This is a sample test from the problem statement!

Test input:
1 3 5 6 10
Correct output:
13 6 9 15 7

Your code output:


Error:
Traceback (most recent call last):
  File "jailed_code", line 13, in <module>
    b.append (a[i - 1] + a[i + 1])
IndexError: list index out of range
  • Вопрос задан
  • 3791 просмотр
Пригласить эксперта
Ответы на вопрос 4
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
Ошибка потому, что вы перепутали, что такое у вас i.
Сначала это у вас один из элементов списка чисел; а потом вы его считаете индексом.

Рекомендую перестать использовать однобуквенные имена переменных и не лениться называть их по смыслу. Не for i in a:
а лучше:
for next_element in my_massive:

Тогда уж вы не перепутали бы и не стали бы обращаться к my_massive[next_element - 1]
Ответ написан
Комментировать
mmmaaak
@mmmaaak
Разве на курсах не должно быть наставника, который должен помогать с вопросами по материалу? За это так-то и платятся деньги.
Ответ написан
@dooMoob
Советую посмотреть на эти 2 строчки
for i in a:

b.append (a[i - 1] + a[i + 1])
Ответ написан
Комментировать
@kashapovin
I started learning python in April 2022
s = [ int(i) for i in input().split()]
t = []
l = len(s)-1
k = 0
i = 0
if len(s)==0:
print(str(0))
else:
for st in s:
if len(s)>1:
if i==0:
k = s[i+1] + s[-1]
t.append(k)
elif i>0 and i k=s[i-1]+s[i+1]
t.append(k)
elif i==l:
k = s[i-1]+s[0]
t.append(k)
elif len(s)==1:
k = s[i]
t.append(k)
i +=1
j = 0
for st2 in t:
print(str(t[j])+' ',end='')
j +=1
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы