Mon programme fonctionne mais il me fait mal au yeux !
Résolu
Multi73
Messages postés
95
Statut
Membre
-
Phil_1857 Messages postés 1883 Date d'inscription Statut Membre Dernière intervention -
Phil_1857 Messages postés 1883 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
J'ai fait un petit programme qui fonctionne il me fait mal au yeux pouvez me dire comment le rectifier ?
Au début je voulais faire deux fichier en créant une classe.
J'ai su l'importer mais je n'ai pas su lui dire fait ce que te demande la classe.
Donc j'ai abandonné la class mais si quelqu'un sait comment faire j'aimerais bien qu'il me le dise car mon programme est très brouillon !
Voici mon programme:
Merci beaucoup !
J'ai fait un petit programme qui fonctionne il me fait mal au yeux pouvez me dire comment le rectifier ?
Au début je voulais faire deux fichier en créant une classe.
J'ai su l'importer mais je n'ai pas su lui dire fait ce que te demande la classe.
Donc j'ai abandonné la class mais si quelqu'un sait comment faire j'aimerais bien qu'il me le dise car mon programme est très brouillon !
Voici mon programme:
import time
import os
os.system("color c")
def operation():
calculation = input("Quel opération veux tu faire ? (répondre: multiplication, division, addition ou soustraction)")
if calculation == "multiplication":
multi1 = float(input("Quel est le premier nombre de ta multiplication ?"))
multi2 = float(input("Quel est le deuxième nombre de ta multiplication ?"))
resultat_multi = multi1 * multi2
print("Le résulat de la mutiplication est", resultat_multi, "!")
time.sleep(4)
if calculation == "division":
div1 = float(input("Quel est le premier nombre de ta division ?"))
div2 = float(input("Quel est le deuxième nombre de ta division ?"))
resultat_div = div1 / div2
print("Le résulat de la division est", resultat_div, "!")
time.sleep(4)
if calculation == "addition":
add1 = float(input("Quel est le premier nombre de ton addition ?"))
add2 = float(input("Quel est le deuxième nombre de ton addition ?"))
resultat_add = add1 + add2
print("Le résulat de l'addition est", resultat_add, "!")
time.sleep(4)
if calculation == "soustraction":
sous1 = float(input("Quel est le premier nombre de ta soustraction ?"))
sous2 = float(input("Quel est le deuxième nombre de ta soustraction ?"))
resultat_sous = sous1 * sous2
print("Le résulat de la soustraction est", resultat_sous, "!")
time.sleep(4)
refaire = input("Veux tu refaire une autre opération (répondre par oui ou non)")
if refaire == "oui":
operation()
else:
input("Ok, Au revoir !")
time.sleep(4)
exit()
operation()
Merci beaucoup !
7 réponses
-
yg_be Messages postés 23437 Date d'inscription Statut Contributeur Dernière intervention Ambassadeur 1 588
bonjour,
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 * + - /
-
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 :
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:
# -*- 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 à :
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 :-) ) -
Mieux:
import re p = r'(\d+\.*\d*(\+|\-|\*|\/))+\d+\.*\d*$' resp = '' while(True): while(not re.match(p, resp) and resp != 'q'): resp = input('\nEntrer une opération arithmétique ou <q>uitter : ') if(resp == 'q'): break print(eval(resp)) resp = ''