Почему я получаю «IndexError: индекс списка вне допустимого диапазона»

avatar
Nguyen Huu Thuan
8 августа 2021 в 19:21
70
3
-4

Я получаю эту ошибку:

IndexError: индекс списка вне допустимого диапазона

Это моя функция:

def power(x, y, bound):
    list, exp = [], []
    z = -1
    for i in range (1, bound):
        for j in range (1, bound):
            if x**i + y**j in range (bound):
                if x**i + y**j in list:
                    break
                else:
                    list.append(x**i + y**j)
                    z += 1
                    if z == 0:
                        exp.append(str(x**i + y**j)+" = " + str(x) + "^" + str(i) + " + " + str(y) + "^" + str(j))
                        break
                    if list[z] == max(list):
                        exp.append(str(x**i + y**j)+" = " + str(x) + "^" + str(i) + " + " + str(y) + "^" + str(j))
                    else:
                        for n in range(len(list)):
                            if (list[z] < list[n+1]) and (list[z] > list[n]):
                                exp.insert(n, str(x**i + y**j) + " = " + str(x) + "^" + str(i) + " + " + str(y) + "^" + str(j))
            else:
                break
    print("\nThe list of values:", sorted(list))
    print("\nExplaination:\n"+"\n".join(exp))

Вызов моей функции:

print("Input: Two positive integers x and y and the bound\nOutput: A list of values x^i + y^j bounded by bound\n(i and j are positive integers)\n")
x = int(input("Input x: "))
y = int(input("Input y: "))
bound = int(input("Input the bound: "))

power(x, y, bound)

Как решить эту проблему?

Источник

Ответы (3)

avatar
quamrana
8 августа 2021 в 19:52
0

Хорошо, теперь вы изменили свой код, и мой предыдущий ответ признан недействительным.

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

if (list[z] < list[n+1]) and (list[z] > list[n]):

с n+1, потому что n происходит от for n in range(len(list)): и в конечном итоге n+1 выпадет из конца list.

Вы должны спросить себя, что на самом деле означает: if (list[z] < list[n+1]) and (list[z] > list[n]):.

Nguyen Huu Thuan
8 августа 2021 в 19:59
0

спасибо, я забыл условие, что z должно быть > 1, я сейчас удалю свой пост, извините за потраченное время, большое спасибо

Nguyen Huu Thuan
8 августа 2021 в 20:05
0

это результат!!!!! Наконец-то я это сделал. Введите x: 4 Введите y: 6 Введите границу: 100 Список значений: [10, 22, 52, 70] Объяснение: 10 = 4^1 + 6^1 22 = 4^2 + 6^ 1 52 = 4^2 + 6^2 70 = 4^3 + 6^1 [Программа завершена]

halfer
10 августа 2021 в 07:24
0

Если вы даете ответ, а редактирование вопроса делает этот ответ недействительным, верните вопрос обратно к соответствующему редактированию. В самом деле, сделать это сейчас может быть любезно по отношению к Джеймсу, который, возможно, ответил на первоначальный вопрос.

halfer
10 августа 2021 в 07:25
0

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

avatar
James K. Lowden
8 августа 2021 в 20:47
0

Одним из способов решения вашей проблемы является перехват исключения и вывод соответствующих значений. Учтите:

$ python3 <<EOF
a = []
try:
  i = 3
  a[i] = 0
except IndexError as oops:
  print( "%s: array is %d and index is %d" % (str(oops), len(a), i) )
EOF

list assignment index out of range: array is 0 and index is 3
avatar
quamrana
8 августа 2021 в 19:29
1

Ну, просто взглянув на код в вашей функции, становится очевидным, что i превышает размер list:

def power(x, y, bound):
    list, exp = [], []

list (не используйте <75843332622597> в качестве имени переменной — это встроенное имя, и вы перезаписали его здесь) начинается с пустого списка.

i = -1

Эта строка бесполезна, так как i перезаписывается в следующей строке

for i in range (1, bound):

Итак, <75843332622599> теперь 1

    list.append(x**i + y**j)

Похоже, вы добавили первое значение к list - теперь оно имеет размер 1

        i += 1

Теперь вы увеличиваете i, поэтому должно быть 2

        if list[i] == max(list):

Но теперь вы пытаетесь проиндексировать list, что вызывает IndexError

Nguyen Huu Thuan
8 августа 2021 в 19:38
0

@quamara извините, я редактирую свой код, у него та же проблема

quamrana
8 августа 2021 в 19:40
0

Пожалуйста, обновите свой вопрос с примерами входных данных, которые показывают заявленную проблему.