2017-02-17 8 views
0

У меня есть код, основанный на задаче 3 от Project Euler: «Основными факторами 13195 являются 5, 7, 13 и 29. Какой самый большой простой коэффициент числа 600851475143?»Python for loop: ошибка «индекс индекса вне диапазона»?

У меня есть код ниже, который, как я думал, будет работать, но строка 9 (for k in range(2,res[j]):) продолжает возвращать ошибку: «IndexError: list index out the range». Кажется, я не изменяю свой список, когда я перехожу через цикл for, поэтому я не уверен, что случилось.

def find_primes(num): 
    res = [] 
    print(num) 

    for i in range(2,num): 
     if num%i==0: 
      res.append(i) 

    for j in res: 
     for k in range(2,res[j]): 
      if res[j]%k==0: 
       res[j]=False 
    list(filter((False).__ne__, res)) 

    m = max(res) 
    return(m) 

Кто-нибудь знает, где я иду не так?

Спасибо!

+0

Ваш код не имеет правильного отступа. пожалуйста, исправьте его, чтобы мы могли вам помочь! – Arman

+0

, потому что 'res [j]' переходит в 'j'th элемент в' res', а 'res' имеет числа, большие, чем длина. – TemporalWolf

+0

Вы должны просмотреть руководство по созданию циклов. – TigerhawkT3

ответ

2

вероятно Вы имели в виду сделать:

for j in range(len(res)): 
    for k in range(2,res[j]): 

Использование for j in res Переберем res элементов.

+1

Вы имеете в виду 'for j in range (len (res)):' – tennabey

+0

Вы правы, я не думал. Большое вам спасибо за вашу помощь! –

+0

@tennabey мой плохой, отредактированный –