Créer un calculateur de Nombres Premiers en Python

Créer un calculateur de Nombres Premiers en Python

Salut, aujourd’hui on repart sur un projet en Python. Le projet consiste à créer une application en Python capable d’effectuer deux tâches principales liées aux nombres premiers :

  1. Vérifier si un nombre donné est un nombre premier.
  2. Afficher tous les nombres premiers entre 1 et une limite définie par l’utilisateur.

Pour rendre l’expérience utilisateur agréable, l’application propose un menu interactif, permet de saisir des données, et affiche des résultats colorés pour une meilleure lisibilité.

Ce projet permet de comprendre et d’appliquer plusieurs concepts importants en programmation :

  1. Boucles et conditions : Les boucles permettent de répéter des actions, et les conditions (if/else) déterminent le comportement du programme en fonction des entrées.
  2. Modularisation du code : L’utilisation de fonctions permet de diviser le code en blocs logiques réutilisables, rendant le programme plus clair et facile à maintenir.
  3. Interaction avec l’utilisateur : L’application utilise des entrées utilisateur (input) pour rendre le programme interactif.
  4. Gestion des erreurs : Le programme est robuste et gère les saisies incorrectes grâce à des exceptions (try-except).

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()

Cette fonction détermine si un nombre donné est un nombre premier.

  • Qu’est-ce qu’un nombre premier ? 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 sont des nombres premiers.
  • Comment fonctionne cette fonction ?
    1. Si le nombre est inférieur ou égal à 1, ce n’est pas un nombre premier. On retourne immédiatement False.
    2. On vérifie si le nombre est divisible par un autre nombre compris entre 2 et sa racine carrée. Pourquoi jusqu’à la racine carrée ? Parce que si un nombre est divisible par un entier plus grand que sa racine carrée, il a déjà été divisé par un nombre plus petit (optimisation).
    3. Si aucun diviseur n’est trouvé, le nombre est un nombre premier et on retourne True.
  • Exemple d’utilisation :
    • Appeler est_premier(7) retournera True car 7 est un nombre premier.
    • Appeler est_premier(8) retournera False car 8 est divisible par 2.

Cette fonction génère tous les nombres premiers entre 1 et une limite donnée.

  • Comment fonctionne-t-elle ?
    1. La fonction parcourt tous les nombres de 2 jusqu’à la limite donnée.
    2. Pour chaque nombre, elle appelle la fonction est_premier(nombre). Si le nombre est premier, il est ajouté à une liste.
    3. Une fois tous les nombres parcourus, la liste des nombres premiers est retournée.
  • Exemple d’utilisation :
    • Appeler nombres_premiers_jusqua(10) retournera [2, 3, 5, 7].

Cette fonction est la colonne vertébrale du programme. Elle affiche un menu interactif et gère les choix de l’utilisateur.

  • Structure :
    • Le menu propose trois options :
      1. Vérifier si un nombre est premier.
      2. Afficher tous les nombres premiers jusqu’à une limite.
      3. Quitter le programme.
    • Une boucle while True assure que le menu est constamment affiché jusqu’à ce que l’utilisateur choisisse de quitter.
  • Interactions avec l’utilisateur :
    • Si l’utilisateur choisit 1, il entre un nombre, et le programme affiche si ce nombre est premier ou non.
    • Si l’utilisateur choisit 2, il entre une limite, et le programme affiche tous les nombres premiers jusqu’à cette limite.
    • Si l’utilisateur choisit 3, le programme affiche un message de départ et se termine.
  • Gestion des erreurs :
    • Si l’utilisateur entre un texte ou une option invalide, le programme affiche un message d’erreur et lui redemande un choix.
  • Couleurs :
    • Les résultats sont affichés en jaune pour une meilleure visibilité, grâce aux codes ANSI (\033[93m pour le jaune et \033[0m pour réinitialiser).

Je vous laisse améliorer ce programme à votre aise. N’hésitez pas à laisser des commentaires si vous avez des questions. A bientôt

Comments

No comments yet. Why don’t you start the discussion?

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *