IndexError: list index out of range

CREATIVE

Новичок
Пользователь
Окт 19, 2020
21
0
1
Repl.it
Python v3.5
У меня вылетает ошибка "IndexError: list index out of range", но я не понимаю почему.
Я прикрепил скрин программы и ошибки, и архив с самой программой(там еще 2 текстовых документа с входными данными).
Очень надеюсь, что вы сможете мне помочь
 

Вложения

  • Снимок.PNG
    Снимок.PNG
    78,1 КБ · Просмотры: 3
  • BrilliantWillingClasslibrary.zip
    116,8 КБ · Просмотры: 2

CREATIVE

Новичок
Пользователь
Окт 19, 2020
21
0
1
Я понимаю, что в программе можно было, что то изменить, что бы она лучше работала(быстрее и тд), но меня больше волнует ошибка
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 608
466
83
ошибка "IndexError: list index out of range"
это значит что в строке 15 вы выходите за пределы массива (списка)
 

CREATIVE

Новичок
Пользователь
Окт 19, 2020
21
0
1
это значит что в строке 15 вы выходите за пределы массива (списка)

на строке 60, единственное, что происходит, это подача данных.
Если не ошибаюсь, то ошибка на строке 15
 

Вложения

  • Снимок.PNG
    Снимок.PNG
    6,2 КБ · Просмотры: 4

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 608
466
83
возможно проблема в (len(numbers) + 1)
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 608
466
83
на строке 60, единственное, что происходит, это подача данных.
Если не ошибаюсь, то ошибка на строке 15
да в 15 я просмотрел чучуть
 

CREATIVE

Новичок
Пользователь
Окт 19, 2020
21
0
1
возможно проблема в (len(numbers) + 1)
Возможно, но я проверял и все нормально работало

for i in range(len(numbers) + 1):
print(i)


Вывод:
0
1
2
3
4
5
...
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 608
466
83
уберите строку file.readline() и в принте будут все элементы что в файле, с file.readline() вы теряете первый элемент
Python:
    with open(f"{file_name}.txt", "r") as file:
        # file.readline()
        data = file.readlines()
    numbers = [int(x.replace("\n", "")) for x in data]
    numbers = sorted(numbers, reverse=True)
    print(numbers)

и в for уберите + 1, в принте тоже все элементы
Python:
for i in range(len(numbers)):
    print(numbers[i])
    ...

в итоге так работает без ошибок, я не понял смысла задачи, но ошибок нет
Python:
def get_max_summ(file_name):
    delit_7 = [1]
    delit_2 = [1]
    delit_14 = [1]

    with open(f"{file_name}.txt", "r") as file:
        data = file.readlines()
    numbers = [int(x.replace("\n", "")) for x in data]
    numbers = sorted(numbers, reverse=True)
  
    for i in range(len(numbers)):

        if numbers[i] % 7 == 0 and numbers[i] % 2 != 0:
            if delit_7[0] == 1:
                delit_7[0] = numbers[i]
            else:
                delit_7.append(numbers[i])

        if numbers[i] % 2 == 0 and numbers[i] % 7 != 0:
            if delit_2[0] == 1:
                delit_2[0] = numbers[i]
            else:
                delit_2.append(numbers[i])
        if numbers[i] % 14 == 0 and numbers[i] % 2 != 0:
            if delit_14[0] == 1:
                delit_14[0] = numbers[i]
            else:
                delit_14.append(numbers[i])

    delit_7 = sorted(delit_7, reverse=True)
    delit_2 = sorted(delit_2, reverse=True)
    delit_14 = sorted(delit_14, reverse=True)

    if delit_7[0] > delit_2[0]:
        max_number = [delit_7[0]]
    else:
        max_number = [delit_2[0]]
    if max_number[0] < delit_14[0]:
        max_number = [delit_14[0]]
    max_1 = max_number[0] * delit_14[0]
    max_2 = delit_7[0] * delit_2[0]

    if max_1 > max_2:
        print(max_1)
    else:
        print(max_2)


get_max_summ('27985_A')
# get_max_summ('27985_B')
 
Последнее редактирование:

CREATIVE

Новичок
Пользователь
Окт 19, 2020
21
0
1
уберите строку file.readline() и в принте будут все элементы что в файле, с file.readline() вы теряете первый элемент
Python:
    with open(f"{file_name}.txt", "r") as file:
        # file.readline()
        data = file.readlines()
    numbers = [int(x.replace("\n", "")) for x in data]
    numbers = sorted(numbers, reverse=True)
    print(numbers)

и в for уберите + 1, в принте тоже все элементы
Python:
for i in range(len(numbers)):
    print(numbers[i])
    ...

в итоге так работает без ошибок, я не понял смысла задачи, но ошибок нет
Python:
def get_max_summ(file_name):
    delit_7 = [1]
    delit_2 = [1]
    delit_14 = [1]

    with open(f"{file_name}.txt", "r") as file:
        data = file.readlines()
    numbers = [int(x.replace("\n", "")) for x in data]
    numbers = sorted(numbers, reverse=True)
 
    for i in range(len(numbers)):

        if numbers[i] % 7 == 0 and numbers[i] % 2 != 0:
            if delit_7[0] == 1:
                delit_7[0] = numbers[i]
            else:
                delit_7.append(numbers[i])

        if numbers[i] % 2 == 0 and numbers[i] % 7 != 0:
            if delit_2[0] == 1:
                delit_2[0] = numbers[i]
            else:
                delit_2.append(numbers[i])
        if numbers[i] % 14 == 0 and numbers[i] % 2 != 0:
            if delit_14[0] == 1:
                delit_14[0] = numbers[i]
            else:
                delit_14.append(numbers[i])

    delit_7 = sorted(delit_7, reverse=True)
    delit_2 = sorted(delit_2, reverse=True)
    delit_14 = sorted(delit_14, reverse=True)

    if delit_7[0] > delit_2[0]:
        max_number = [delit_7[0]]
    else:
        max_number = [delit_2[0]]
    if max_number[0] < delit_14[0]:
        max_number = [delit_14[0]]
    max_1 = max_number[0] * delit_14[0]
    max_2 = delit_7[0] * delit_2[0]

    if max_1 > max_2:
        print(max_1)
    else:
        print(max_2)


get_max_summ('27985_A')
# get_max_summ('27985_B')
К сожалению, программа работает не правильно
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 608
466
83
ну если знать задачу, может я бы подсказал получше, я не телепат вы уж простите
 

Форум IT Специалистов