lolight | Salut bistouille, tu déboite !
Super, je suis trop fan, j'ai regardé ton code hier dans l'ensemble histoire de voir un peut les généralitées, et je m'y suis repenché aujourd'hui un peut plu sen détail, il n'y a effectivement rien de bien méchant mais quand même pas mal de syntaxe/façon "nouvelle" de traiter les choses. Typiquement le SEP_DEC (c'est super pratique, c'est vrais qu'on sais jamais si on doit mettre une virgule ou un point), les columnspan/column, enfin pas mal de petit nouveau truc qui faut que j'ajoute à lexique
Un gros merci pour avoir commenté ton code ça m'a beaucoup aider à trouver quesque tu fesais et ou
Au final du coup j'ai reprise ton code et essayé de compléter comme il faut aux endroit ou il faut les informations correspondantes.
Notamment pour la réduction. D'ailleur cette réduction est donnée à certain employé qui font beaucoup de déplacement dans certaines entreprise, je connais pas le détail mais je crois que c'est une indémnisation au kms.
Après c'est un amis qui m'a conseillé d'intégré ça puis bon, ça fais de l'dexercice .
Si non niveau regex, je suppose que c'est e genre de truc "r'^\d\.\d{2}$'", pour le coup j'avais un erreur sur l'un d'enntreux, j'ai un peut improvisé en copiant le format d'un autre que tu avais écris qui devais avoir le même format.
Je link le code modifié et l'image, parce que c'est quand même plus sexe avec
Je crois qu'au final sans ton aide j'y serais jamais arrivé, mais ça me hype !
Encore merci pour ton aide, si mon code n'es pas trop salle, il me reste plus qu'à me trouver une autre idée d'exo pour essayé d'assimiler complètement ce que j'ai apprise avec celui-ci >.>
J'ai peut être fais des erreus dans, du coup, le peux de chose que j'ai écris , notamment au niveau des resultats.append ou je ne comprends pas le if ?, je viens de comprendre en relisant, je pense que tu souhaitais que je dise si reduction ne vaut rien ou n'es pas renseigner, ne pas le mentionner ou boycott l'affichage de réduction dans résultats ?
Au final j'ai solve tout ça en mettant que réduction devais être égal à 0 si aucune.
Mais je modifierais si c'est plus clean de faire autrement.
Code :
- #!/usr/bin/python3.4
- # -*-coding: utf-8 -*
- import tkinter as tk
- import re
- SEP_DEC = ',' # Séparateur des décimaux
- def bonusReduction(reduction, kms) :
- return round(reduction * kms, 2)
-
- def estimationCoutTrajet(kms, consommation, prixDuLitre) :
- return round(kms * consommation * prixDuLitre / 100, 2)
-
- def estimationConsommationTrajet(kms, consommation) :
- return round(kms * consommation / 100, 2)
- def estimationConsommationTrajetTotal(kms, consommation, reduction) :
- return round((kms * consommation / 100 ) - (reduction * kms), 2)
- def afficherResultats(objet) :
- # Ici on vérifie les valeurs des variables tkinter que l'on a défini.
- # Et on a uniquement besoin du widget tkinter auquel on a affilié les StringVars pour y avoir acccès.
- # (dans le code on a utilisé la fenêtre root)
- # variables définies : prix, kms, conso, reduc, resultat
- # On ne fait rien, aucun des champs requis n'ont été renseignés
- if not objet.getvar('prix') and not objet.getvar('kms') and not objet.getvar('conso') and not objet.getvar('reduc') :
- return
- prix = objet.getvar('prix')
- kms = objet.getvar('kms')
- conso = objet.getvar('conso')
- reduc = objet.getvar('reduc')
- if SEP_DEC != '.' :
- prix = prix.replace(SEP_DEC, '.')
- kms = kms.replace(SEP_DEC, '.')
- conso = conso.replace(SEP_DEC, '.')
- reduc = reduc.replace(SEP_DEC, '.')
-
- resultats = []
- # Contrôles des valeurs
- if not prix :
- resultats.append('Vous devez renseigner le prix au litre du carburant.')
- elif not re.match(r'^\d\.\d{2}$', prix) :
- resultats.append('Le prix du carburant doit être de la forme 0{}00 .'.format(SEP_DEC))
-
- if not kms :
- resultats.append('Vous devez renseigner le nombre de kilomètres à parcourir.')
- elif not re.match('^\d+(\.\d\d?)?$', kms) :
- resultats.append('Kilomètres doit être un entier, ou un nombre décimal à un ou 2 décimaux.')
-
- if not conso :
- resultats.append('Vous devez renseigner la consommation moyenne.')
- elif not re.match('^\d+(\.\d\d?)?$', conso) :
- resultats.append('La consommation doit être un entier, ou un décimal.')
-
- if not reduc :
- resultats.append('Vous devez renseigner votre réduction, 0 si aucune.')
- elif not re.match(r'^\d\.\d{2}$', reduc) :
- resultats.append('La reduction doit être de forme 0{}00 .'.format(SEP_DEC))
-
- # Erreurs rencontrées
- if resultats :
- objet.setvar('resultat', '\n'.join(resultats))
- return
-
- # Conversion des strings en float pour effectuer les calculs
- prixf = float(prix)
- kmsf = float(kms)
- consof = float(conso)
- reducf = float(reduc)
-
- coutTrajet = str(estimationCoutTrajet(kmsf, consof, prixf))
- consoTrajet = str(estimationConsommationTrajet(kmsf, consof))
- consoTrajetTot = str(estimationConsommationTrajetTotal(kmsf, consof, reducf))
- reduction = str(bonusReduction(kmsf, reducf))
- if SEP_DEC != '.' :
- coutTrajet = coutTrajet.replace('.', SEP_DEC)
- consoTrajet = consoTrajet.replace('.', SEP_DEC)
- consoTrajetTot = consoTrajetTot.replace('.', SEP_DEC)
- resultats.append("Coût du voyage estimé : {}€".format(consoTrajetTot))
- resultats.append("Coût brut du voyage estimé : {}€".format(coutTrajet))
- if reduc :
- #XXX Ajouter à resultats les 2 messages supplémentaires
- pass
- resultats.append('Consommation : {}L'.format(consoTrajet))
- resultats.append('Réduction : {}€ '.format(reduction))
-
- objet.setvar('resultat', '\n'.join(resultats))
- fenetre = tk.Tk()
- fenetre.title = "VoyCalc"
- fenetre['bg'] = "dark slate grey"
- cadre = tk.Frame(fenetre, bg="dark slate grey" )
- cadre.grid()
- cadre.columnconfigure(2, weight=1)
- canvas = tk.Canvas(cadre, width=500, height=50, bg="dark slate grey" )
- canvas.grid(row=1, column=1, columnspan=2)
- photo = tk.PhotoImage(file="VoyCalc.png" )
- canvas.create_image(0, 0, anchor=tk.NW, image=photo)
- labelInfo = tk.Label(cadre, text="Calcul du coût du carburant d'un trajet", bg="dark slate grey" )
- labelInfo.grid(row=2, column=1, columnspan=2, pady=20)
- labelPrix = tk.Label(cadre, text="Prix au litre du carburant :", bg="dark slate grey" )
- labelPrix.grid(row=3, column=1, padx=15, pady=5, sticky=tk.E)
- varPrix = tk.StringVar(fenetre, "", "prix" ) # tkinter Variable peut prendre 3 arguments => StringVar(master, value, name)
- entreePrix = tk.Entry(cadre, textvariable=varPrix, width=10, bg="dark slate grey" )
- entreePrix.grid(row=3, column=2, sticky=tk.W)
- entreePrix.columnconfigure(1, weight=5)
- labelKms = tk.Label(cadre, text="Nombre de kilomètres à parcourir :", bg="dark slate grey" )
- labelKms.grid(row=4, column=1, padx=15, pady=5, sticky=tk.E)
- varKms = tk.StringVar(fenetre, "", "kms" )
- entreeKms = tk.Entry(cadre, textvariable=varKms, width=10, bg="dark slate grey" )
- entreeKms.grid(row=4, column=2, sticky=tk.W)
- labelConso = tk.Label(cadre, text="Consommation (litres/100) :", bg="dark slate grey" )
- labelConso.grid(row=5, column=1, padx=15, pady=5, sticky=tk.E)
- varConso = tk.StringVar(fenetre, "", "conso" )
- entreeConso = tk.Entry(cadre, textvariable=varConso, width=10, bg="dark slate grey" )
- entreeConso.grid(row=5, column=2, sticky=tk.W)
- labelReduc= tk.Label(cadre, text="Réduction (optionnel) :", bg="dark slate grey" )
- labelReduc.grid(row=6, column=1, padx=15, pady=5, sticky=tk.E)
- varReduc = tk.StringVar(fenetre, "", "reduc" )
- entreeReduc = tk.Entry(cadre, textvariable=varReduc, width=10, bg="dark slate grey" )
- entreeReduc.grid(row=6, column=2, sticky=tk.W)
- varResultat = tk.StringVar(fenetre, "", "resultat" )
- labelResultat = tk.Label(cadre, textvariable=varResultat, width=70, height=4, justify=tk.LEFT, bg="dark slate grey" )
- labelResultat.grid(row=8, column=1, columnspan=2)
- boutonCalcul = tk.Button(cadre, text="Calculer", relief="flat", command=lambda f=fenetre : afficherResultats(f))
- boutonCalcul.grid(row=7, column=1, columnspan=2, pady=20)
- boutonQuit = tk.Button(cadre, text="Quiter", relief="flat", command=fenetre.quit)
- boutonQuit.grid(row=9, columnspan=4, pady=20)
- fenetre.mainloop()
|
---------------
--- Mon topik d'Ach/Ven ---
|