Mon programme fonctionne mais il me fait mal au yeux !
Résolu
Multi73
Messages postés
88
Date d'inscription
Statut
Membre
Dernière intervention
-
Phil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
Phil_1857 Messages postés 1872 Date d'inscription Statut Membre Dernière intervention -
A voir également:
- Mon programme fonctionne mais il me fait mal au yeux !
- Programme au démarrage windows 10 - Guide
- Lancer un programme au démarrage windows 10 - Guide
- Mettre en veille un programme - Guide
- Message programmé iphone - Guide
- Pourquoi la tnt fonctionne mal en ce moment - Guide
7 réponses
yg_be
Messages postés
23541
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 584
bonjour,
que souhaites-tu améliorer?
que souhaites-tu améliorer?
Comme je l'ai dit, faire une classe pour avoir deux fichier et savoir afficher la classe dans le fichier principale.
Salut,
Dans un programme on ne devrait pas retrouver des séquences quasi identiques répétées. Là saisie du nombre1, du nombre 2 et du résultat pourraient être communs aux 4 opérations. Puis saisir le nom de l'opération en entier !!! tu pourrais demander juste le symbole * + - /
Dans un programme on ne devrait pas retrouver des séquences quasi identiques répétées. Là saisie du nombre1, du nombre 2 et du résultat pourraient être communs aux 4 opérations. Puis saisir le nom de l'opération en entier !!! tu pourrais demander juste le symbole * + - /
Il faut exploiter la façon dont python fonctionne, quand on utilise + - * /, tout passe par des méthodes d'objets.
Comme dit au-dessus, il faut éviter la redondance, les boucles, itérables, etc sont à utiliser, il faut aussi gérer les erreurs potentielles, savoir se servir des fonctions de formatage de chaînes.
Ton code revu :
Si t'as des questions, pose-les.
Sinon, je n'ai pas compris ton problème de classes et fichiers, quel est le souci ?
Comme dit au-dessus, il faut éviter la redondance, les boucles, itérables, etc sont à utiliser, il faut aussi gérer les erreurs potentielles, savoir se servir des fonctions de formatage de chaînes.
Ton code revu :
import time import os os.system("color c") def operation(): fonctions = { "multiplication":('ta', "la ", float.__mul__), "division":('ta', "la ", float.__truediv__), "addition":('ton', "l'", float.__add__), "soustraction":('ta', "la ", float.__sub__), } while True: calculation = input("Quel opération veux tu faire ? (répondre: multiplication, division, addition ou soustraction)") if calculation not in fonctions: print("Choix inconnu !") else: break nums = [] for s in ("premier", "second"): while True: prm = fonctions[calculation][0] num = input(f"Quel est le premier nombre de {prm} {calculation} ?") try: num = float(num) except ValueError: print("Entrez une valeur numérique !") else: break nums.append(num) resultat = fonctions[calculation][2](*nums) print(f"Le résultat de {fonctions[calculation][1]}{calculation} est {resultat}") while True: refaire = input("Veux tu refaire une autre opération (répondre par oui ou non)") if refaire == "oui": operation() elif refaire == "non": print("Ok, Au revoir !") return else: print("Ordinateur pas comprendre ce que toi dire !") operation()
Si t'as des questions, pose-les.
Sinon, je n'ai pas compris ton problème de classes et fichiers, quel est le souci ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour Multi73
Ou bien un peu plus court:
Ca donne ça:

Ou bien un peu plus court:
# -*- coding:Latin-1 -*- import re p = r'^(\d+\.\d*|[0-9]*)(\+|\-|\*|\/)(\d+\.\d*|[0-9]*)$' def exp_ok(resp): if(re.match(p, resp) or resp == 'q'): return(True) else: return(False) resp = '' while(True): while(not exp_ok(resp)): resp = input('\nEntrer une opération (+, -, *, /) q pour quitter : ') if(resp == 'q'): break print(eval(resp)) resp = ''
Ca donne ça:
On peut même faire plus court, on ouvre un interpréteur python ou on lance la calulatrice système.
Les eval, exec sont des fonctions à éviter au maximum et encore moins à conseiller à des débutants.
Pourquoi mettre l'encoding en latin ? Aucun intérêt, l'utf-8 est la norme.
De plus ton expression est incorrecte, elle autorise par exemple un simple / et les parenthèses capturantes sont inutiles, voilà une autre bonne raison de ne pas utiliser eval.
Elle devrait se résumer à :
Également, ta fonction pourrait se résumer à faire
Nul besoin de condition.
Les eval, exec sont des fonctions à éviter au maximum et encore moins à conseiller à des débutants.
Pourquoi mettre l'encoding en latin ? Aucun intérêt, l'utf-8 est la norme.
De plus ton expression est incorrecte, elle autorise par exemple un simple / et les parenthèses capturantes sont inutiles, voilà une autre bonne raison de ne pas utiliser eval.
Elle devrait se résumer à :
p = "\d+(\.\d+)?(\+|/|\-|\*)\d+(\.\d+)?$"
Également, ta fonction pourrait se résumer à faire
def exp_ok(resp): p = "\d+(\.\d+)?(\+|/|\-|\*)\d+(\.\d+)?$" return re.match(p, resp) or resp == 'q' # Ou encore pour n'avoir qu'un bool en retour # return bool(re.match(p, resp)) or resp == 'q' # return any((re.match(p, resp), resp == 'q'))
Nul besoin de condition.
Oui, on peut toujours faire plus court .... :-)
Je sais qu'il faut éviter eval pour des raisons de sécurité, mais dans cette petite appli, ca ne va pas très loin, on sait on l'on va ... :-)
(d'ailleurs, quand Guido Von Rossum a créé le langage, il y a mis cette fonction, et il n'est pas le premier venu en informatique :-) )
Je sais qu'il faut éviter eval pour des raisons de sécurité, mais dans cette petite appli, ca ne va pas très loin, on sait on l'on va ... :-)
(d'ailleurs, quand Guido Von Rossum a créé le langage, il y a mis cette fonction, et il n'est pas le premier venu en informatique :-) )