2017-02-17 8 views
0

J'ai un code, basé sur le problème 3 du Projet Euler: "Les facteurs premiers de 13195 sont 5, 7, 13 et 29. Quel est le plus grand facteur premier du nombre 600851475143?"Python pour boucle: erreur "liste d'index hors de portée"?

J'ai un code ci-dessous que je pensais fonctionner, mais la ligne 9 (for k in range(2,res[j]):) continue de retourner l'erreur: "IndexError: indice de liste hors de portée". Il ne semble pas que je modifie ma liste au fur et à mesure que je parcours ma boucle for, donc je ne suis pas sûr de ce qui ne va pas.

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) 

Est-ce que quelqu'un sait où je vais mal?

Merci!

+0

Votre code n'a pas d'indentation correcte. veuillez le corriger afin que nous puissions vous aider! – Arman

+0

parce que 'res [j]' va au 'j'th item dans' res', et 'res' a des nombres plus grands que sa longueur. – TemporalWolf

+0

Vous devriez revoir un tutoriel sur les constructions en boucle. – TigerhawkT3

Répondre

2

Vous avez probablement censé faire:

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

L'utilisation for j in res itérera plus res éléments.

+1

Vous voulez dire pour j dans la gamme (len (res)): ' – tennabey

+0

Vous avez raison, je ne pensais pas. Je vous remercie beaucoup pour votre aide! –

+0

@tennabey mon mauvais, édité –