Imbrications de loop "FOR" avec identification des mois dans un trimes

Fermé
Coellophysis Messages postés 5 Date d'inscription dimanche 29 mars 2009 Statut Membre Dernière intervention 19 septembre 2019 - Modifié le 18 sept. 2019 à 14:47
[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 - 19 sept. 2019 à 11:22
Bonjour,

Je cherche à créer des notes de frais mensuelles par gérants. J'ai réussi à coder de manière à calculer par gérants en fonction du nombre de jour, de créer un joli fichier word que j'envoie ensuite automatiquement par mail au comptable.

Mais comme mon comptable travaille par trimestre, mon code actuelle m'oblige pour deux gérants à créer et envoyer 6 doc en 6 mails séparés, ce serait plus convivial de lui envoyer deux mails avec les documents joints du mois+1/mois+2/mois+3.

Pour cela je dois d'abord définir:
1) le gérant
2) le trimestre
3) les mois dans le trimestre

J'arrive à définir le 1) et le 2) via liste/dictionnaire et phrase interrogative de type "input" mais comment poser une question à l'utilisateur avec une variable en plus?

voici une partie du code, pour la question "-Tapez le nombre de jours pour le mois:"+m je voudrais que la variable "m" donne "janvier" si on réponds "Q1" dans le trimestre mais elle me donne "Q", à la fin de la loop, je voudrais la même question pour février et ensuite mars.

Je pense que je me trompe entre liste et dictionnaire?

Toute aide est la bien venue.

Notez que je n'ai pas encore travailler le code pour créer plusieurs attachements, mais un problème à la fois, je précise que je suis un néophyte donc j'imagine que le code aurait pu être plus simple :-)

Gerants = ["Luc","François"]
Quarters ={'Q1':("janvier","fevrier","mars"),'Q2':("avril","mai","juin"),'Q3':("juillet","aout","septembre"),'Q4':("octobre","novembre","decembre")}
Tarifs = {'Luc':10,'François':12}


for gerant in Gerants:

    QuartersSelect = ""
    while QuartersSelect != "quitter":
        QuartersSelect = input("Sélectionnez le trimestre (ex:Q1/Q2/Q3/Q4) ou tapez quitter pour sortir:")
        for m in QuartersSelect:

            JourPreste = int(input("Tapez le nombre de jours de prestations entre 1 et 31 pour le mois :"+m))
                if(JourPreste > 0) and (JourPreste <=31):
                print("Vous avez tapé: ",JourPreste)
                print(Tarifs[gerant])
                NotedeFrais = JourPreste *Tarifs[gerant]
                NotedeFrais = round(NotedeFrais,2)
                Decompte = "Le coût pour le "
                Decompte += gerant
                Decompte += " pour le mois de "
                Decompte += m
                Decompte += " est de "
                Decompte += str(JourPreste)
                Decompte += " x"
                Decompte += str(Tarifs[gerant])
                Decompte += "="
                Decompte += str(NotedeFrais)
                Decompte += " EUR"+"\n"+"\n"
A voir également:

2 réponses

[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 1 083
19 sept. 2019 à 10:46
Salut Coellophysis,

En ligne 11, tu énumères le contenu de l'objet
QuartersSelect
, qui est une string obtenue avec
input()
. Cela énumère naturellement les lettres contenues dans la string et à la première itération tu te retrouves avec
"Q"
si tu as saisi
"Q1"
(et à la deuxième
"1"
).

Or, ce que tu veux, c'est utiliser les clefs de ton dictionnaire Quarters pour accéder aux éléments des tuples auxquelles elles donnent accès, c'est à dire pour la clef
"Q1"
, énumérer successivement les éléments
"janvier"
,
"fevrier"
,
"mars"
.

Il me semble alors que tu devrais plutôt essayer ceci en ligne 11 :

for m in Quarters[QuartersSelect]:


Dal

P.S. : je n'ai pas regardé, ni exécuté le reste du code
0
Coellophysis Messages postés 5 Date d'inscription dimanche 29 mars 2009 Statut Membre Dernière intervention 19 septembre 2019
19 sept. 2019 à 11:15
Bonjour Dal,

Tu as vu juste, le code tourne avec ta modification. Je vais revoir mes notions des tuples car c'est encore un peu flou pour moi mais merci beaucoup en tout cas.
0
[Dal] Messages postés 6175 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 30 avril 2024 1 083
Modifié le 19 sept. 2019 à 11:22
de rien :-)

une autre observation : si ton comptable "travaille par trimestre", il n'a peut-être pas besoin de l'information par mois. Dès lors, est-ce qu'il n'est pas plus approprié de lui envoyer un mail par personne concernée avec un seul fichier joint cumulant les frais du trimestre concerné ?
0