IndexError: list index out of range. Помогите 4 часа решаю проблему

a = input().split()
c = 0
d = 0
sum = 0
for i in range(len(a)):
    a[i] = int(a[i])
c = max(a)
d = min(a)
for i in range(len(a)):
    if (c == a[i]) or (d == a[i]): del a[i] - ОШИБКА ЗДЕСЬ - IndexError: list index out of range
for i in range(len(a)):
    sum += a[i]
print(d,c)
print(a)
print(sum/3)

введите сюда описание изображения


Ответы (1 шт):

Автор решения: Евгений

У вас в задаче сказано, что решение должно быть оформлено в виде функции
Вариант 1 (с использованием стандартной функции сортировки)

def func(s: str):
  a = [int(c) for c in s.split()]
  a.sort()
  return (str(a[0]) + ' ' + str(a[-1]), sum(a[1:-1])/3)

s = input()
for line in func(s):
  print(line)

Вариант 2 (без использования посторонних стандартных функций. Сортируем вручную):

def func(s: str):
  a = [int(c) for c in s.split()]
  for i in range(len(a)-1):
    for j in range(len(a)-i-1):
        if a[j] > a[j+1]:
            a[j], a[j+1] = a[j+1], a[j]
  return (str(a[0]) + ' ' + str(a[-1]), sum(a[1:-1])/3)

s = input()
for line in func(s):
  print(line)

Вариант 3 (тот же В2, но ВСЁ находится в функции. А что, а вдруг?)

def func(s: str):
  a = [int(c) for c in s.split()]
  for i in range(len(a)-1):
    for j in range(len(a)-i-1):
        if a[j] > a[j+1]:
            a[j], a[j+1] = a[j+1], a[j]
  print(str(a[0]) + ' ' + str(a[-1]))
  print(sum(a[1:-1])/3)

s = input()
func(s)

Вариант 4 (без сортировки вообще)

def func(s: str):
  a = [int(c) for c in s.split()]
  min_i = 0
  max_i = 0
  for i in range(len(a)):
    if a[i] > a[max_i]:
      max_i = i
    if a[i] < a[min_i]:
      min_i = i
  print(a[min_i], a[max_i])
  if min_i < max_i:
    a = a[:min_i] + a[min_i+1:]
    a = a[:max_i-1] + a[max_i:]
  else:
    a = a[:min_i] + a[min_i+1:]
    a = a[:max_i] + a[max_i+1:]
  print(sum(a)/3)

s = input()
func(s)

Результат работы программы:

5 1 2 4 3
1 5
3.0

Что касательно вашего кода - проблема IndexError обусловлена тем, что оператор del физически удаляет элемент. А поскольку элемент удалён физически, список становится меньше, и, дойдя до индекса len(a)-1 (последний индекс начального списка), программа возвращает исключение

→ Ссылка