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

Coellophysis Messages postés 5 Date d'inscription   Statut Membre Dernière intervention   -  
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   -
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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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   Statut Membre Dernière intervention  
 
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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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