2017-08-26 1 views
0

Je dois écrire une fonction, is_prime(), qui prend un entier n> 1 et renvoie TRUE si le nombre est un nombre premier et False sinon. Mais quand j'ai entré 2, il retourne toujours False. Y at-il de toute façon à corriger cela?Recherche de nombres premiers en Python

def is_prime(x): 
    if(x > 1): 
     for i in range(2,x+1): 
      if(x % i == 0): 
       return False 
      else: 
       return True 
    else: 
     return False 
+0

Vous avez un code mal écrit. Vérifiez-le pour 15. Votre code montrera qu'il est premier –

+0

il reviendra vrai pour tous les nombres impairs –

+0

Salut! Y a-t-il des manières de le changer? Vraiment apprécient votre aide. – Marcus

Répondre

1

Deux questions:
Le premier numéro est cette gamme comprend le nombre lui-même, ce qui signifie qu'il retourne toujours vrai (pour les numéros> 1), car les nombres premiers peuvent se diviser ...

Fix : changement range(2,x+1) à: range(2, x)

question en second lieu, la première else doit être aligné avec le for (nous retournons vrai que après avoir essayé tous les chiffres et faire en sorte qu'aucun d'entre eux divise x)

Code fixe:

def is_prime(x): 
    if x > 1: 
     for i in range(2,x): 
      if x % i == 0: 
       return False 
     else: 
      return True 
    else: 
     return False 
+0

Bonjour! si je change la gamme à ce que vous avez mentionné.Quand je tape is_prime (2) dans shell.Il n'affichera rien. – Marcus

+0

@Marcus 'range (2, x)' inclut 2 et exclut 'x'. Donc 'is_prime (2)' retournera vrai - comme il se doit. – alfasin

+0

Puis-je vous demander un autre qn? Disons que x = 2. x% je serai == 0? – Marcus

0

Bien que @ solution de alfasin est correcte (+1), je trouve l'utilisation de else fait comprendre un peu plus difficile.

Le else sur la boucle for en particulier m'a obligé de relire la documentation Python comme la plupart des sources disent que le else signifie pas de rupture mais cela signifie vraiment terminé normalement, ce qui est vrai dans le cas d'une boucle qui ne fonctionnait pas du tout!

Voici mon réusinage enlever les else déclarations qui ne sont pas strictement nécessaires:

def is_prime(x): 
    if x > 1: 
     for i in range(2, x): 
      if x % i == 0: 
       return False 

     return True 

    return False 

Comme d'autres souligneront, ce qui est probablement aussi inefficace un test de choix que vous pouvez écrire. Mais ça fonctionne.

2

Au lieu de faire cela, vous pouvez également utiliser le module SymPy

import sympy 

sympy.isprime(5) 

Résultat:

True