Calculatrice en python
Résolu/FerméPhil_1857 Messages postés 1872 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 13 août 2022 à 17:42
- Calculatrice en python
- Installer calculatrice sur mon portable - Télécharger - Calcul & Conversion
- Citizen code python avis - Accueil - Outils
- Calculatrice gratuit - Télécharger - Calcul & Conversion
- Ma-calculatrice - Télécharger - Calcul & Conversion
4 réponses
Modifié le 11 août 2022 à 15:17
Bonjour,
Quelques recommandations :
- Dans l'absolu, tu pourrais directement utiliser la fonction eval, mais ça tue un peu l'exercice, donc ignorons cette remarque.
- Soigne l'indentation : idéalement, chaque niveau d'indentation doit faire un multiple de 4 espaces. Veille également à mettre une espace derrière chaque virgule. Toutes ces conventions font partie de la norme PEP-8.
- Comme souligné par yg_be (message #2), tu pourrais avoir un seul return op en fin de fonction. Par ailleurs, return n'est pas une fonction, donc il n'y a pas de raison d'entourer op par des parenthèses.
- Dans la fonction opération, il serait plus naturel de recevoir le caractère qui correspond à l'opération, quitte à changer l'entier saisi par l'utilisateur en amont de cette fonction. Note qu'en python, tu peux aussi directement passer une opération, ce qui permet de factoriser le code (voir ce lien).
- Le test sur choice n'est pas assez rigoureux, car il ne traite pas les valeurs négatives, flottantes, et non entières. Si la valeur saisie n'est pas transformable sous forme d'entier, le programme plante.
- Tu peux rattraper les divisions par 0 avec un try ... except.
- Les erreurs devraient être écrites sur la sortie d'erreur standard (sys.stderr)
- Plutôt que de faire pleins de print, tu peux n'en faire qu'un, mais bon c'est un détail, car le gain en performance est négligeable.
- Généralement un programme python commence par une ligne qui indique l'interpréteur à utiliser (shebang) et il est recommandé en python d'indiquer l'encodage (ce qui permet d'utiliser des chaînes accentuées sans problème dans le code, les commentaire, etc.
- Tu peux en python3 indiquer le type des arguments et de la type de retour pour améliorer la lisibilité de ton code. Idéalement, tu peux même les documenter avec une docstring.
- Quand une variable doit être initialisé par une valeur invalide, on utilise plutôt None en python.
Voici à quoi ça pourrait ressembler :
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import operator import sys def error(message: str): print(message, file=sys.stderr) def prompt_int(label: str) -> int: i = None while i is None: try: return int(input(label)) except ValueError: error("Saisie invalide") print("Bienvenue dans la calculette !") a = prompt_int("Entrer votre premier nombre : ") b = prompt_int("Entrer votre second nombre : ") print( "Quelle opération voulez-vous faire ?\n" "1 - Addition\n" "2 - Soustraction\n" "3 - Multiplication\n" "4 - Division\n" ) map_index_op = { 1: operator.add, 2: operator.sub, 3: operator.mul, 4: operator.truediv, } op = None while op is None: choice = prompt_int("Entrer votre choix : ") op = map_index_op.get(choice) if not op: error("Saisie invalide") else: try: print("Le résultat vaut", op(a, b)) except ZeroDivisionError as e: error("Division par 0 impossible") except Exception as e: error(e) break
Bonne chance
Modifié le 10 août 2022 à 18:40
Bonjour,
Sur la logique de ton code on pourrait imaginer quelque chose de plus pratique :
- saisir un nombre
- saisir un opérateur (+,-,*,/) plutôt qu'un menu correspondant aux opérations possibles
- saisir un second nombre
- tu lances le calcul de l'opération
Et on pourrait continuer, tu affiches le résultat, et tu saisis un nouvel opérateur, si l'utilisateur répond rien, vide, c'est fini, s'il donne un opérateur valide, tu saisis un nouveau nombre et tu réalises l'opération, et tu boucles sur ce processus
10 août 2022 à 18:48
Accessoirement sur ton code, tu ne testes pas que la réponse sur le choix de l'opération est bien seulement 1,2,3,4
10 août 2022 à 20:31
Je ne comprend pas ?
10 août 2022 à 18:45
bonjour,
tu peux retirer le return(op) de chaque if, et le mettre ensuite.
pour le test de la division par 0, tu peux faire une seul if.
13 août 2022 à 17:42
Bonjour,
Tu peux aussi faire ça en 2 lignes:
calcul = input('Entrer un calcul (ex: 3+2/5) : ') print('{} = {}'.format(calcul, eval(calcul)))
En fait, un peu plus de 2 lignes car l'idéal serait de tester l'entrée avec une expression régulière (import re)
avant d'imprimer le résultat