Mon programme fonctionne mais il me fait mal au yeux !
Résolu/Fermé
Multi73
Messages postés
88
Date d'inscription
dimanche 13 septembre 2020
Statut
Membre
Dernière intervention
4 mai 2022
-
Modifié le 27 juin 2021 à 18:44
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 29 juin 2021 à 09:10
Phil_1857 Messages postés 1883 Date d'inscription lundi 23 mars 2020 Statut Membre Dernière intervention 28 février 2024 - 29 juin 2021 à 09:10
A voir également:
- Mon programme fonctionne mais il me fait mal au yeux !
- Programme au démarrage windows 10 - Guide
- Lancer un programme au demarrage - Guide
- Ce message d'erreur apparaît sur l'ordinateur d'elena. que peut-on dire du programme gwxux ? - Forum logiciel systeme
- Desinstaller un programme - Guide
- Fichier ouvert dans un autre programme - Guide
7 réponses
yg_be
Messages postés
22773
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 mai 2024
1 481
27 juin 2021 à 18:59
27 juin 2021 à 18:59
bonjour,
que souhaites-tu améliorer?
que souhaites-tu améliorer?
Multi73
Messages postés
88
Date d'inscription
dimanche 13 septembre 2020
Statut
Membre
Dernière intervention
4 mai 2022
2
27 juin 2021 à 19:22
27 juin 2021 à 19:22
Comme je l'ai dit, faire une classe pour avoir deux fichier et savoir afficher la classe dans le fichier principale.
yg_be
Messages postés
22773
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
9 mai 2024
1 481
27 juin 2021 à 20:44
27 juin 2021 à 20:44
pourquoi faire deux fichiers?
as-tu déjà fait des exercices avec des classes?
que ferait cette classe?
as-tu déjà fait des exercices avec des classes?
que ferait cette classe?
jee pee
Messages postés
39705
Date d'inscription
mercredi 2 mai 2007
Statut
Modérateur
Dernière intervention
9 mai 2024
9 267
27 juin 2021 à 19:23
27 juin 2021 à 19:23
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
Phil_1857
Messages postés
1883
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
178
Modifié le 28 juin 2021 à 11:48
Modifié le 28 juin 2021 à 11:48
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.
Phil_1857
Messages postés
1883
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
178
28 juin 2021 à 13:09
28 juin 2021 à 13:09
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 :-) )
Multi73
Messages postés
88
Date d'inscription
dimanche 13 septembre 2020
Statut
Membre
Dernière intervention
4 mai 2022
2
Modifié le 28 juin 2021 à 17:16
Modifié le 28 juin 2021 à 17:16
Merci beaucoup !
J'ai réussi a faire plus court !
J'ai réussi a faire plus court !
Phil_1857
Messages postés
1883
Date d'inscription
lundi 23 mars 2020
Statut
Membre
Dernière intervention
28 février 2024
178
29 juin 2021 à 09:10
29 juin 2021 à 09:10
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 = ''