
Exercice 1 : Créer une calculatrice simple (addition, soustraction, multiplication, division)
Apprenez à créer une calculatrice en Python (addition, soustraction, multiplication, division). Un exercice pratique pour maîtriser input, float, if/elif/else et la gestion d'erreurs.
Objectif du projet : une calculatrice en ligne de commande
Bienvenue dans ce premier projet pratique ! L'objectif est de développer une calculatrice simple qui s'exécute en ligne de commande. Votre programme devra être capable de demander à l'utilisateur d'entrer deux nombres, puis de choisir une opération arithmétique de base parmi l'addition (+), la soustraction (-), la multiplication (*) et la division (/). Une fois ces informations recueillies, la calculatrice effectuera le calcul et affichera le résultat.
Ce projet est idéal pour mettre en application plusieurs concepts fondamentaux de Python que vous avez appris :
- La récupération des saisies utilisateur grâce à la fonction input().
- La conversion des types de données, notamment des chaînes de caractères (str) issues de input() en nombres (float pour permettre les décimaux, ou int si vous préférez vous limiter aux entiers au début).
- L'utilisation des structures conditionnelles (if, elif, else) pour déterminer quelle opération effectuer en fonction du choix de l'utilisateur.
- La réalisation des opérations arithmétiques de base.
- L'affichage des résultats à l'utilisateur via la fonction print().
- En bonus, nous aborderons une gestion simple des erreurs, comme la division par zéro ou une saisie non numérique.
Ce type de programme, bien que simple, simule l'interaction basique que de nombreuses applications ont avec leurs utilisateurs : prendre des entrées, les traiter, et fournir une sortie. C'est un excellent exercice pour solidifier vos bases.
Décomposition du problème : les étapes clés de la calculatrice
Avant de se lancer dans le code, il est toujours utile de décomposer le problème en étapes plus petites et plus gérables. Pour notre calculatrice, nous pouvons identifier les étapes suivantes :
1. Message de bienvenue : Informer l'utilisateur du rôle du programme.
Exemple : print("Bienvenue dans la Calculatrice Python Simple !")
2. Obtenir le premier nombre :
- Demander à l'utilisateur d'entrer le premier nombre avec input().
- Convertir la chaîne de caractères reçue en un type numérique (par exemple, float). Il faudra gérer le cas où l'utilisateur entre quelque chose qui n'est pas un nombre (ValueError).
Exemple :
try:
nombre1_str = input("Entrez le premier nombre : ")
nombre1 = float(nombre1_str)
except ValueError:
print("Entrée invalide. Veuillez entrer un nombre.")
# Gérer l'erreur, par exemple, quitter ou redemander.3. Obtenir l'opérateur :
- Demander à l'utilisateur de choisir une opération (par exemple, en entrant '+', '-', '*', '/').
Exemple : operation = input("Choisissez une opération (+, -, *, /) : ")
4. Obtenir le deuxième nombre :
- Similaire à l'étape 2, demander et convertir le deuxième nombre.
Exemple :
try:
nombre2_str = input("Entrez le deuxième nombre : ")
nombre2 = float(nombre2_str)
except ValueError:
print("Entrée invalide. Veuillez entrer un nombre.")
# Gérer l'erreur.5. Effectuer le calcul en fonction de l'opérateur :
- Utiliser une série de conditions if, elif, et else pour vérifier quel opérateur a été choisi.
- Effectuer l'opération correspondante.
- Pour la division, vérifier si le deuxième nombre est zéro. Si c'est le cas, afficher un message d'erreur spécifique (ZeroDivisionError).
Exemple :
resultat = None
if operation == '+':
resultat = nombre1 + nombre2
elif operation == '-':
resultat = nombre1 - nombre2
elif operation == '*':
resultat = nombre1 * nombre2
elif operation == '/':
if nombre2 == 0:
print("Erreur : Division par zéro impossible !")
else:
resultat = nombre1 / nombre2
else:
print("Opération non valide.")6. Afficher le résultat :
- Si un calcul a été effectué avec succès, afficher le résultat de manière claire.
Exemple (si resultat n'est pas None et qu'il n'y a pas eu d'erreur de division par zéro) :
print(f"Le résultat de {nombre1} {operation} {nombre2} est : {resultat}")
7. (Optionnel) Permettre de recommencer :
- Demander à l'utilisateur s'il souhaite effectuer un autre calcul.
- Si oui, utiliser une boucle while pour réitérer l'ensemble du processus.
Exemple :
while True:
# ... code de la calculatrice ...
continuer = input("Voulez-vous faire un autre calcul ? (oui/non) : ").lower()
if continuer != 'oui':
break
print("Merci d'avoir utilisé la calculatrice.")Cette décomposition vous donne une feuille de route claire pour construire votre programme étape par étape.
Code source complet et explications détaillées
Voici une proposition de code complet pour la calculatrice simple, intégrant les étapes décrites ci-dessus, y compris la boucle pour refaire des calculs et une gestion des erreurs plus robuste avec des blocs try-except.
# Projet 1 : Calculatrice Simple en Python
def calculatrice():
"""Fonction principale pour la calculatrice."""
print("-"*30)
print("Bienvenue dans la Calculatrice Python Simple !")
print("-"*30)
while True:
try:
# Obtenir le premier nombre
nombre1_str = input("Entrez le premier nombre : ")
nombre1 = float(nombre1_str) # Conversion en float pour autoriser les décimaux
# Obtenir l'opérateur
print("Opérations disponibles : +, -, *, /")
operation = input("Choisissez une opération : ").strip() # .strip() enlève les espaces en trop
# Obtenir le deuxième nombre
nombre2_str = input("Entrez le deuxième nombre : ")
nombre2 = float(nombre2_str)
resultat = None # Initialiser le résultat
# Effectuer le calcul
if operation == '+':
resultat = nombre1 + nombre2
elif operation == '-':
resultat = nombre1 - nombre2
elif operation == '*':
resultat = nombre1 * nombre2
elif operation == '/':
if nombre2 == 0:
print("Erreur : Division par zéro impossible.")
# Pas de 'continue' ici si on veut quand même demander si l'utilisateur veut continuer
else:
resultat = nombre1 / nombre2
else:
print("Opération non valide. Veuillez choisir parmi +, -, *, /.")
# Afficher le résultat si le calcul a été possible
if resultat is not None:
print(f"Résultat : {nombre1} {operation} {nombre2} = {resultat:.2f}") # :.2f pour afficher avec 2 décimales
elif operation == '/' and nombre2 == 0: # Gérer le cas de la division par zéro déjà affiché
pass
elif operation not in ['+', '-', '*', '/']:
pass # Message d'erreur d'opération déjà affiché
else:
print("Aucun calcul n'a pu être effectué avec les entrées fournies.")
except ValueError:
print("Erreur de saisie : Veuillez entrer des nombres valides.")
except Exception as e: # Attrape toute autre exception imprévue
print(f"Une erreur inattendue est survenue : {e}")
print("-"*30)
# Demander si l'utilisateur veut continuer
continuer = input("Voulez-vous effectuer un autre calcul ? (oui/non) : ").lower().strip()
if continuer != 'oui':
break # Sort de la boucle while
print("-"*30)
print("Merci d'avoir utilisé la Calculatrice Simple ! Au revoir.")
# Appel de la fonction principale pour démarrer la calculatrice
if __name__ == "__main__":
calculatrice()Explications du code :
- def calculatrice(): : Nous encapsulons la logique principale dans une fonction. C'est une bonne pratique pour organiser le code.
- while True: : Crée une boucle infinie qui ne sera interrompue que par une instruction break (lorsque l'utilisateur choisit de ne pas continuer).
- try...except ValueError: : Ce bloc gère les erreurs qui se produisent si float() ne peut pas convertir l'entrée en nombre (par exemple, si l'utilisateur tape "abc").
- except Exception as e: : C'est un gestionnaire d'erreurs plus général qui attrapera d'autres exceptions imprévues et affichera le message d'erreur e.
- operation.strip() : La méthode .strip() est utilisée pour supprimer les espaces accidentels que l'utilisateur pourrait taper avant ou après l'opérateur (par exemple, " + " au lieu de "+").
- if resultat is not None: : On vérifie si un résultat a été calculé avant de l'afficher. C'est utile car si l'opération est invalide ou s'il y a une division par zéro, resultat conservera sa valeur initiale (None).
- {resultat:.2f} : Dans la f-string, :.2f est utilisé pour formater le nombre à virgule flottante afin qu'il s'affiche avec seulement deux chiffres après la virgule. C'est plus propre pour une calculatrice.
- continuer.lower().strip() : On convertit la réponse de l'utilisateur en minuscules avec .lower() pour que "oui", "Oui", "OUI" soient tous acceptés, et on utilise .strip() pour la robustesse.
- if __name__ == "__main__": : C'est une construction Python standard qui assure que la fonction calculatrice() n'est appelée que lorsque le script est exécuté directement (et non lorsqu'il est importé comme module dans un autre script).
Pistes d'amélioration et défis supplémentaires :
1. Permettre des opérations plus complexes (puissance **, modulo %).
2. Gérer les entrées d'opérations sur plusieurs caractères (par exemple, "addition" au lieu de "+").
3. Ajouter une fonction de "mémoire" (M+, MR, MC).
4. Permettre des calculs en chaîne (utiliser le résultat précédent comme premier nombre du calcul suivant).
5. Créer une interface graphique (GUI) en utilisant une bibliothèque comme Tkinter ou PyQt (ceci est un pas beaucoup plus grand, pour plus tard !).
N'hésitez pas à copier ce code, à l'exécuter, à le modifier et à expérimenter avec. C'est en pratiquant que vous apprendrez le mieux ! Testez différents scénarios : entrées valides, entrées invalides (texte au lieu de nombres), division par zéro, opérateurs incorrects, etc., pour bien comprendre comment le programme réagit.