2017-04-12 1 views
0

Je crée un programme Python pour déterminer si un nombre est premier ou non. C'est ce que j'ai:Le programme de nombres premiers de Python ne fonctionne pas

print("Please enter your number:") 
number = int(input()) 


if number > 2: 
    for i in range (2,number): 
     if (number % i) == 0: 
      print(number, "is not prime") 
      break 
     else: 
      print(number, "is prime") 
      break 
else: 
    print(number, "is not prime") 

Cela fonctionne pour tous les cas d'utilisation sauf 2. Pourquoi? Et comment puis-je le réparer?

+2

Cela ne _not_ travail pour "chaque cas d'utilisation sauf 2". Essayez avec le numéro 9. Vous avez 'print" est premier "' dans votre boucle, mais vous ne pouvez pas savoir qu'il est premier jusqu'à ce que toute la boucle soit terminée. En outre, vous sautez directement à "n'est pas premier" si le nombre est 2. – khelwood

+0

Je l'ai réparé. J'ai dû mettre le "else: number is prime" en dehors de la boucle for. –

Répondre

3

Parce que 2 n'est pas supérieur à 2, il tombe donc dans l'état else.

Pour résoudre ce problème, vous devez créer un cas particulier pour 2:

print("Please enter your number:") 
number = int(input()) 

if number > 2: 
    for i in range (2,number): 
     if (number % i) == 0: 
      print(number, "is not prime") 
      break 
    else: 
      print(number, "is prime") 
elif number == 2: 
    print(number, "is prime") 
else: 
    print(number, "is not prime") 

Edit: En utilisant pour-autre comme @Azat Ibrakov suggéré

+1

Cela ne fonctionne toujours pas correctement pour trouver des nombres premiers. D'après cela, 9 est premier. – khelwood

+0

@khelwood Doit être corrigé – fedterzi

+1

'number = int (input()) car le type int' n'est pas une syntaxe Python valide, et ne fait pas partie du code de l'OP [ah, il faisait partie du code _original_ de l'OP.] Est-ce que cela fonctionne même? – DSM

0

S'il vous plaît trouverez ci-dessous mon code, je contournais 2.

La valeur '2' ne passe jamais par la boucle pour imprimer par défaut "Prime".

Pour tous les autres, cela fonctionne comme prévu.

for i in range (1,100): 
    self.bar(i) 

def bar(self,number): 

    if number > 1 : 
     for i in range(2,number): 
      r = number % i 
      if r == 0 : 
       return 
     print(str(number) + ' : Prime') 

2: Prime 3: Premier 5: Prime 7: Prime 11: Prime 13: Prime 17:
Premier 19: Prime 23: Prime 29: Prime 31: Prime 37: Prime 41:
premier 43: Prime 47: Prime 53: Prime 59: Prime 61: Prime 67:
Prime 71: Prime 73: Prime 79: Prime 83: Prime 89: Prime 97: premier