Dans ce tutoriel, tu vas créer un programme de nombres premiers en Python : vérifier si un nombre est premier et afficher tous les nombres premiers jusqu’à une limite, avec un menu interactif dans le terminal et des résultats en couleur. Travailler sur les nombres premiers en Python est un exercice idéal pour maîtriser les boucles, les conditions, les fonctions et la gestion des erreurs.
Ce que tu vas construire : un programme de nombres premiers en Python
Un nombre premier est un entier supérieur à 1 qui n’a que deux diviseurs : 1 et lui-même. Par exemple 2, 3, 5, 7, 11 ou 13. Ton programme de nombres premiers en Python saura les reconnaître et les lister.
Ce que tu vas apprendre
- Boucles et conditions : répéter des actions et choisir le comportement selon les entrées
- Fonctions : découper le code en blocs logiques et réutilisables
- Interaction : lire les saisies de l’utilisateur avec
input() - Gestion des erreurs : rendre le programme robuste avec
try/except
Prérequis
- Python 3 installé sur ton ordinateur
- Un éditeur de code : VS Code, PyCharm ou IDLE
- Le module colorama, pour les couleurs dans le terminal
Étape 1 : installer colorama
Le programme utilise colorama pour afficher des couleurs dans le terminal, y compris sous Windows. Installe-le avec pip :
pip install coloramaterminalInstalle tes modules dans un environnement dédié au projet. Suis le guide comment créer un environnement virtuel Python.
Étape 2 : le code complet
Crée un fichier nombres_premiers.py et copie ce code, qui contient toute la logique pour trouver les nombres premiers en Python :
import colorama
from colorama import Fore, Style
# Initialisation de colorama pour une utilisation multiplateforme des couleurs
colorama.init(autoreset=True)
def est_premier(nombre: int) -> bool:
"""
Vérifie si un nombre est premier.
Un nombre premier est un entier supérieur à 1 qui n'a que deux diviseurs :
1 et lui-même.
Paramètres :
nombre (int) : Le nombre à vérifier.
Retourne :
bool : True si le nombre est premier, sinon False.
"""
if nombre <= 1:
return False
for diviseur in range(2, int(nombre ** 0.5) + 1):
if nombre % diviseur == 0:
return False
return True
def nombres_premiers_jusqua(limite: int) -> list:
"""
Génère et retourne une liste de tous les nombres premiers entre 1 et une limite donnée.
Paramètres :
limite (int) : La limite supérieure pour la recherche des nombres premiers.
Retourne :
list : Une liste contenant tous les nombres premiers jusqu'à 'limite'.
"""
liste_premiers = []
for nombre in range(2, limite + 1):
if est_premier(nombre):
liste_premiers.append(nombre)
return liste_premiers
def verifier_nombre_premier():
"""
Demande à l'utilisateur d'entrer un nombre et affiche s'il est premier ou non.
"""
try:
nombre = int(input("Entrez un nombre pour vérifier s'il est premier : "))
if est_premier(nombre):
print(f"{Fore.YELLOW}{nombre} est un nombre premier.{Style.RESET_ALL}")
else:
print(f"{Fore.YELLOW}{nombre} n'est pas un nombre premier.{Style.RESET_ALL}")
except ValueError:
print("Entrée invalide. Veuillez entrer un nombre entier valide.")
def afficher_nombres_premiers():
"""
Demande à l'utilisateur d'entrer une limite et affiche
tous les nombres premiers jusqu'à cette limite.
"""
try:
limite = int(input("Entrez une limite pour afficher tous les nombres premiers : "))
if limite < 2:
print("Il n'y a aucun nombre premier en dessous de 2.")
return
premiers = nombres_premiers_jusqua(limite)
# Conversion de la liste en chaîne de caractères séparés par des virgules pour l'affichage
premiers_str = ", ".join(str(p) for p in premiers)
print(f"{Fore.YELLOW}Les nombres premiers entre 1 et {limite} sont : {premiers_str}{Style.RESET_ALL}")
except ValueError:
print("Entrée invalide. Veuillez entrer un nombre entier valide.")
def afficher_menu_principal():
"""
Affiche le menu interactif et gère les choix de l'utilisateur.
Le menu propose trois options :
1. Vérifier si un nombre est premier
2. Afficher tous les nombres premiers jusqu'à une limite
3. Quitter l'application
"""
while True:
print("\n=== MENU PRINCIPAL ===")
print("1. Vérifier si un nombre est premier")
print("2. Afficher tous les nombres premiers jusqu'à une limite")
print("3. Quitter")
try:
choix = int(input("Entrez votre choix : "))
if choix == 1:
verifier_nombre_premier()
elif choix == 2:
afficher_nombres_premiers()
elif choix == 3:
print(f"{Fore.YELLOW}Merci et à bientôt !{Style.RESET_ALL}")
break
else:
print("Choix invalide. Veuillez entrer un numéro entre 1 et 3.")
except ValueError:
print("Entrée invalide. Veuillez entrer un numéro valide.")
def main():
"""
Fonction principale qui démarre l'application.
"""
afficher_menu_principal()
if __name__ == "__main__":
main()nombres_premiers.pyLance ensuite le programme depuis un terminal :
python nombres_premiers.pyterminalÉtape 3 : comprendre le code des nombres premiers en Python
La fonction est_premier(nombre)
- Si le nombre est inférieur ou égal à 1, il n’est pas premier : la fonction renvoie
False - Sinon, elle cherche un diviseur entre 2 et la racine carrée du nombre
- Si aucun diviseur n’est trouvé, le nombre est premier : elle renvoie
True
Exemple : est_premier(7) renvoie True, tandis que est_premier(8) renvoie False car 8 est divisible par 2.
Si un nombre a un diviseur plus grand que sa racine carrée, il en a forcément un autre plus petit, déjà testé. Pour 100, inutile d’aller au-delà de 10 : le programme est beaucoup plus rapide.
La fonction nombres_premiers_jusqua(limite)
Elle parcourt tous les nombres de 2 jusqu’à la limite et ajoute à une liste ceux pour lesquels est_premier() renvoie True. Par exemple, nombres_premiers_jusqua(10) renvoie [2, 3, 5, 7].
Le menu principal
- Une boucle
while Trueaffiche le menu jusqu’à ce que tu choisisses de quitter - Option 1 : tu saisis un nombre et le programme indique s’il est premier
- Option 2 : tu saisis une limite et le programme affiche tous les nombres premiers jusqu’à elle
- Option 3 : le programme affiche un message d’au revoir et s’arrête
- En cas de saisie invalide (texte, mauvaise option), un message d’erreur s’affiche et le menu revient
Aller plus loin : le crible d’Ératosthène
Pour calculer des nombres premiers en Python jusqu’à une grande limite (un million par exemple), le crible d’Ératosthène est bien plus rapide que de tester chaque nombre un par un. Il raye progressivement tous les multiples :
def crible_eratosthene(limite):
if limite < 2:
return []
est_premier = [True] * (limite + 1)
est_premier[0] = est_premier[1] = False
for i in range(2, int(limite ** 0.5) + 1):
if est_premier[i]:
for multiple in range(i * i, limite + 1, i):
est_premier[multiple] = False
return [n for n, premier in enumerate(est_premier) if premier]
print(crible_eratosthene(30)) # [2, 3, 5, 7, 11, 13, 17, 19, 23, 29]crible.pyD’autres idées pour continuer :
- Afficher la décomposition en facteurs premiers d’un nombre
- Mesurer le temps d’exécution avec le module
timepour comparer les deux méthodes - Enregistrer les résultats dans un fichier texte
- Passer à une interface graphique, comme dans la calculatrice Python avec Tkinter ou le générateur de mots de passe avec Tkinter
FAQ : questions fréquentes
Le nombre 1 est-il un nombre premier ?
Non. Un nombre premier doit avoir exactement deux diviseurs distincts, 1 et lui-même. Le nombre 1 n’en a qu’un seul.
Pourquoi les couleurs ne s’affichent pas dans mon terminal ?
Vérifie que colorama est bien installé avec pip install colorama. Certains terminaux très anciens ne gèrent pas les couleurs ANSI.
Mon programme de nombres premiers en Python est lent avec de grandes limites, que faire ?
Utilise le crible d’Ératosthène présenté dans la section « Aller plus loin » : il calcule tous les nombres premiers jusqu’à un million en une fraction de seconde.
Que se passe-t-il si je tape du texte au lieu d’un nombre ?
Le programme intercepte l’erreur avec try/except, affiche un message et te redemande une saisie, sans planter.
Bravo, ton programme de nombres premiers en Python est terminé ! Tu maîtrises maintenant les boucles, les fonctions et la gestion des erreurs. Une question ? Laisse un commentaire ci-dessous.

