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 :
- Vérifier si un nombre donné est un nombre premier.
- 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 :
- 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.
- 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.
- Interaction avec l’utilisateur : L’application utilise des entrées utilisateur (
input
) pour rendre le programme interactif.- Gestion des erreurs : Le programme est robuste et gère les saisies incorrectes grâce à des exceptions (
try-except
).
Code Source
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()
Explication détaillée du code
1. Fonction est_premier(nombre)
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 ?
- Si le nombre est inférieur ou égal à 1, ce n’est pas un nombre premier. On retourne immédiatement
False
.- 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).
- Si aucun diviseur n’est trouvé, le nombre est un nombre premier et on retourne
True
.- Exemple d’utilisation :
- Appeler
est_premier(7)
retourneraTrue
car 7 est un nombre premier.- Appeler
est_premier(8)
retourneraFalse
car 8 est divisible par 2.
2. Fonction nombres_premiers_jusqua(limite)
Cette fonction génère tous les nombres premiers entre 1 et une limite donnée.
- Comment fonctionne-t-elle ?
- La fonction parcourt tous les nombres de 2 jusqu’à la limite donnée.
- Pour chaque nombre, elle appelle la fonction
est_premier(nombre)
. Si le nombre est premier, il est ajouté à une liste.- 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]
.
3. Fonction afficher_menu_principal()
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 :
- Vérifier si un nombre est premier.
- Afficher tous les nombres premiers jusqu’à une limite.
- 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