проблема с массивами и результатом операций, привязанными к значениям

#python #python-2.6

#python #python-2.6

Вопрос:

Вот код python :

 x=[2, 3, 5, 7]
for i in range(1, 5000):
    if i%2:
        if i%3:
            if i%5:
                if i%7:
                    x.append(i)
x.remove(1)
a = 6
b = 2
for i in range(0, 10):
    a = x[a - b]
    b = x[a] - x[b]
  

По какой-то причине я получаю IndexError: list index out of range , хотя x[] равно 1360, а a равно всего 6, а b равно 2, поэтому я не знаю, почему это происходит. Любая помощь была бы приятной.
Я использую оболочку python. Будет ли это проблемой?

Комментарии:

1. Нам понадобится больше кода, чтобы помочь вам, не могли бы вы добавить больше кода и, возможно, дать дополнительные пояснения, также в вашем коде должен быть отступ 🙂

2. Укажите код, определяющий, что такое x , a b . Мы не сможем вам помочь, если нет полного кода.

3. @decoddecod теперь лучше, вы уверены насчет x.удалить (1) отступ строки? Насколько я понимаю, вы пытаетесь получить список чисел, которые делятся на 2,3,5,7, верно? Тогда не могли бы вы объяснить, почему вы делаете x.remove(1)

4. да, 1 не является простым числом, поэтому я удалил его. Я знаю, что это не самый приятный код, но он работает

5. @decoddecod это полный код? где определены a amp; b? Также ваш первый if не имеет отступа

Ответ №1:

Проблема вашего кода заключается в вашей логике в цикле for.

Вы видите:-

 a = 6
b = 2
    for i in range(0, 10):
        a = x[a - b]
        b = x[a] - x[b]
  

Да, a было 6, а b было 2, но затем, когда вы впервые вводите цикл for,
значение a равно

x [a-b], который равен x [6-2]

т. е. x[4], что дает вам 11

таким образом, значение a равно 11, аналогично для b,

 b = x[a] - x[b] # which translates to x[11] - x[2]
  

которое становится b = 32, и цикл продолжает переходить / изменять значения a amp; b, что приводит вас к IndexError: list index out of range ожидаемому.

Попробуйте выполнить свою программу в pycharm и отладить ее, вы поймете это лучше, или, может быть, просто поместите несколько инструкций print.

Я не смог ввести так много в комментарии, поэтому опубликовал его в качестве ответа.