2017-07-15 3 views
3

Mon objectif est de créer un programme qui imprime tous les nombres premiers qu'elle peut trouver à l'écran, mais j'ai un problème où la boucle while ne s'exécute qu'une seule fois, au lieu de répéter indéfiniment .Alors que la boucle censée être infinie se fige après le premier cycle

def isPrime(num): 
    if num < 2: 
     return False 
    if num == 2: 
     return True 
    if num % 2 == 0: 
     return False 
    i = 3 
    while i * i <= num: 
     if num % i == 0: 
      return False 
      i += 2 

x = 1 
while True: 
    x += 1 
    if isPrime(x): 
     print (x) 

J'ai également essayé d'ajouter print("You can see this.") à la fin du code, et il fonctionne, mais une seule fois. Je suis sûr que c'est une erreur commune, puisque Python est très strict sur l'indentation, mais pourriez-vous m'aider à le découvrir? Merci d'avance.

Répondre

2

Le i +=2 est en retrait trop profond, la boucle interne ne se ferme jamais.

Il faut lire

while i * i <= num: 
    if num % i == 0: 
     return False 
    i += 2 

Sinon i n'augmente et la boucle passe et ainsi de suite.

+0

Pouvez-vous reformuler cela? Je ne comprends pas ce que vous voulez dire, désolé ... –

+0

Oh, c'était une erreur stupide de ma part ... merci. Ça ne marche toujours pas ... –

2

Vous avez besoin de return True à la toute fin, après et en dehors de la boucle finale. Sinon, la fonction se termine sans rien retourner explicitement, donc elle renvoie implicitement None qui est interprété comme faux.