Python: Calculer les nombres premiers

def isPrime(num):
    if str(num).isnumeric() and int(num) >= 2:
        for x in range(int(num) - 1, 1, -1):
            if int(num) % x == 0:
                return False, "{:>5d} n'est pas un nombre premier!".format(num)
        return True, "{:>5d} est un nombre premier!".format(num)
    else:
        return False, "Saisir un nombre supérieur égal à 2 !!!"

Exécution de la fonction:

for x in range(50):
    a, b = isPrime(x)
    if a: print(b)

  2 est un nombre premier!
  3 est un nombre premier!
  5 est un nombre premier!
  7 est un nombre premier!
 11 est un nombre premier!
 13 est un nombre premier!
 17 est un nombre premier!
 19 est un nombre premier!
 23 est un nombre premier!
 29 est un nombre premier!
 31 est un nombre premier!
 37 est un nombre premier!
 41 est un nombre premier!
 43 est un nombre premier!
 47 est un nombre premier!

Suivant les conseils de Matt, grosse amélioration de la fonction isPrime()

class LowerThanTwo(Exception):
    pass

def isPrime(num):
    try:
        num = int(num)
        if num < 2: raise LowerThanTwo()
    except ValueError:
        return False, "Saisir un nombre valide !!!"
    except LowerThanTwo:
        return False, "Saisir un nombre supérieur égal à 2 !!!"
    else:
        for x in range(2, num // 2):
            if num % x == 0:
                return False, "{:>5d} n'est pas un nombre premier!".format(num)
        return True, "{:>5d} est un nombre premier!".format(num)

Effectivement, toutes les améliorations apportées améliorent énormément les performances de la fonction.

Analyse des performances à l'aide du module "timeit.timeit"

Avec la fonction de départ, 8,50 secondes

Avec les améliorations, 0,28 seconde

Comme quoi, il est important de développer tranquillement, sans se presser.............