Utilisation de dictionnaires python
Répondre à la discussion
Affichage des résultats 1 à 11 sur 11

Utilisation de dictionnaires python



  1. #1
    Tonymds

    Utilisation de dictionnaires python


    ------

    Bonjour à tous,

    Je suis salarié ayant entamé une formation en programmation python. Mon niveau niveau est élémentaire et je ne parviens pas à résoudre le problème ci-dessous.

    D'avance merci de votre aide.

    Cordialement.
    But: à partir de la liste de listes et deux deux dictionnaires, je dois créer une fonction qui retourne le nombre total de personnes vaccinées uniquement en 1ère injection. Le nom de cette fonction et les 2 éléments pris en argument sont imposés.
    Code:
    VaccinsOf('Normandie',Table) retourne le nombre entier 437195
    
        Department = {
        "Guadeloupe": 1,
        "Martinique": 2,
        "Guyane": 3,
        "La Réunion": 4,
        "Ile-de-France": 11,
        "Centre-Val de Loire": 24,
        "Bourgogne-Franche-Comté": 27,
        "Normandie": 28,
        "Hauts-de-France": 32,
        "Grand Est": 44,
        "Pays de la Loire": 52,
        "Bretagne":"53",
        "Nouvelle-Aquitaine": 75,
        "Occitanie":"76",
        "Auvergne-Rhône-Alpes": 84,
        "Provence-Alpes-Côte d’Azur": 93,
        "Corse": 94
        }
    
    
    ListOfVaccines = {
        1:'Pfizer/BioNTech',
        2:'Moderna',
        3:'AstraZeneka'
    }
    
    # FIRST COLUMN = NUMBER OF DEPARTAMENT
    # SECOND COLUMN = VACCINE (1 = Pfizer/BioNTech, 2 = Moderna, 3 = AstraZeneka)
    # THIRD COLUMN = TOTAL OF FIRST DOSIS APPLIED
    # FOURTH COLUMN = TOTAL OF SECOND DOSIS APPLIED
    
    Table = [[1,1,7969,3313],
    [1,2,83,1],
    [1,3,697,0],
    [2,1,11039,4524],
    [2,3,933,0],
    [3,1,8811,3800],
    [4,1,35529,18119],
    [4,2,2,0],
    [4,3,6,4],
    [6,1,8581,3766],
    [7,1,513,184],
    [7,3,32,0],
    [8,1,952,536],
    [11,1,828227,334869],
    [11,2,79094,20226],
    [11,3,355534,33],
    [24,1,199133,116867],
    [24,2,18194,3987],
    [24,3,79568,8],
    [27,1,239803,110783],
    [27,2,52912,32418],
    [27,3,93073,46],
    [28,1,291062,141670],
    [28,2,28015,6636],
    [28,3,118118,7],
    [32,1,488012,186237],
    [32,2,51601,10998],
    [32,3,225643,62],
    [44,1,455602,221879],
    [44,2,66684,25197],
    [44,3,203653,53],
    [52,1,265609,148216],
    [52,2,23479,4780],
    [52,3,128133,5],
    [53,1,278477,155015],
    [53,2,20131,4043],
    [53,3,131894,6],
    [75,1,529533,291765],
    [75,2,39919,4121],
    [75,3,233597,21],
    [76,1,491870,272539],
    [76,2,34455,8014],
    [76,3,206032,41],
    [84,1,598625,304994],
    [84,2,70730,14270],
    [84,3,272934,66],
    [93,1,467955,209868],
    [93,2,47815,24138],
    [93,3,157888,30],
    [94,1,45209,19798],
    [94,2,4095,1337],
    [94,3,7499,0]]
    Pour retourner l'entier pris en exemple pour la Normandie, il faut donc sommer les coefficients de la 3ième colonne :
    Code:
    [28,1,291062,141670],
    [28,2,28015,6636],
    [28,3,118118,7],
    1 - Je ne vois pas l'intérêt de l'existence du dictionnaire ListOfVaccines ?

    2 - Grâce à mon code ci-dessous, je n'ai pu que extraire que les 3 coefficients correspondant avec l'exemple de la Normandie et suis bloqué pour les prendre individuellement puis en faire la somme ?
    Code:
       def VaccinsOf(Department,Table):
            for n in range(len(Table)):
                while Table[n][0] == Department['Normandie']:
                    return print(Table[n][2])

    -----

  2. #2
    umfred

    Re : Utilisation de dictionnaires python

    tu as le bon principe, sauf que return fait sortir immédiatement de la boucle
    Il faut créer une liste pour ne récupérer que les éléments du département (optionnel) ou sommer directement le résultat du nombre de vaccins Table[n][3] (puisque l'on ne veut que la 1ere injection)

  3. #3
    Tonymds

    Re : Utilisation de dictionnaires python

    Bonjour umfred, merci de tes précisions. C'est pas plutôt Table[n][2] pour la 1ère injection ? Ensuite je ne svois pas pourquoi python me renvoie "none" (voir en PJ) et je ne vois pas comment directement effectuer la somme dans ma fonction. Peux-tu m'aiguiller, stp ?

    Cordialement.
    Images attachées Images attachées  

  4. #4
    vgondr98

    Re : Utilisation de dictionnaires python

    Dans la plupart des langages, la première case d'un tableau est associé à l'indice 0 et la dernière à la taille du tableau -1, donc il faudrait remplacer range(len(Table)) par range(len(Table) -1) pour ne pas avoir de None
    Dernière modification par vgondr98 ; 10/11/2022 à 12h26.

  5. A voir en vidéo sur Futura
  6. #5
    pm42

    Re : Utilisation de dictionnaires python

    Citation Envoyé par vgondr98 Voir le message
    Dans la plupart des langages, la première case d'un tableau est associé à l'indice 0 et la dernière à la taille du tableau -1, donc il faudrait remplacer range(len(Table)) par range(len(Table) -1) pour ne pas avoir de None
    range(len(Table)) va renvoyer de 0 à taille de table -1 justement.
    Sinon, il vaudrait mieux faire :
    Code:
    for t in Table:
      if t[0]...
    Et idéalement respecter les normes de codage python où les variables sont en minuscules.

    Et copier le code entre les balises adaptées est largement plus pratique pour quiconque veut aider que de poster une copie d'écran.

  7. #6
    umfred

    Re : Utilisation de dictionnaires python

    Citation Envoyé par Tonymds Voir le message
    Bonjour umfred, merci de tes précisions. C'est pas plutôt Table[n][2] pour la 1ère injection ? Ensuite je ne svois pas pourquoi python me renvoie "none" (voir en PJ) et je ne vois pas comment directement effectuer la somme dans ma fonction. Peux-tu m'aiguiller, stp ?

    Cordialement.
    J'ai du glisser de 2 à 3 (on va dire que c'est pour voir si tu suivais )

    Sinon le None ne vient pas de la gestion des indices (range(n) donne des valeurs allant de 0 à n-1); mais du fait que tu fasses un print de la fonction VaccinOf; cette fonction ne retournant rien, ça affiche None (les autres valeurs affichées viennent du print dans la fonction)
    Si tu veux que la fonction retourne quelque chose, il faut le mot clé return suivi de la (ou des) variable(s) à retourner
    Ici, au lieu du print dans la boucle de la fonction, il faudrait alimenter une liste, qui serait retournée à la fin
    Code:
    def VaccinsOf(Department,Table):
        result=[]
        for n in range(len(Table)):
            if Table[n][0] == Region[Departement]:
                result.append(Table[n][2])
        return result
    
    print(VaccinsOf('Normandie',Table))
    En reprenant les indications de pm42
    Code:
    def VaccinsOf(Department,Table):
        result=[]
        for t in Table:
            if t[0] == Region[Departement]:
                result.append(t[2])
        return result
    
    print(VaccinsOf('Normandie',Table))
    Dernière modification par umfred ; 10/11/2022 à 14h17.

  8. #7
    Tonymds

    Re : Utilisation de dictionnaires python

    Ok et vous, vous pouvez formuler vos remarques avec moins de maladresse.

    Je suis novice et vous, vraisemblablement maître. Mais en aucun cas, je suis votre élève.

    Merci.

  9. #8
    umfred

    Re : Utilisation de dictionnaires python

    où ça des remarques maladroites ?
    si c'est pour cette phrase "J'ai du glisser de 2 à 3 (on va dire que c'est pour voir si tu suivais )" il faut y voir un trait d'humour.

    et les conseils de pm42 sont des conseils d'ordre pratique pour l'aide sur le forum (il est plus aisé de copier du texte que de recopier le code d'une capture, et les balises de code conservent la mise en page (les indentations) et indiquent qu'il s'agit d'un code, donc plus facile pour tout.

    Sinon dans ta question j'ai zappé qu'il s'agissait d'une somme à faire, donc au lieu d'alimenter une liste, faire la somme cumulée, rien de très compliqué, c'est souvent un exercice de base
    Code:
    def VaccinsOf(Department,Table):
        result=0
        for t in Table:
            if t[0] == Region[Departement]:
                result+=t[2]
        return result
    
    print(VaccinsOf('Normandie',Table))

  10. #9
    Tonymds

    Re : Utilisation de dictionnaires python

    Merci umfred, tu gères, et t'avouerai que j'aurai éventuellement mis 3 jours à coder ce que tu m'as envoyé, d'autant plus que je n'aurai jamais pensé à la méthode append().

  11. #10
    umfred

    Re : Utilisation de dictionnaires python

    voir ma réponse qui s'est croisé avec la tienne, qui repond à la demande de faire une somme, pas de lister les valeurs (ceci dit, après avoir lister on peut faire la somme des valeurs de cette liste, mais ici c'est faire 2 fois le boulot)

  12. #11
    pm42

    Re : Utilisation de dictionnaires python

    Citation Envoyé par umfred Voir le message
    et les conseils de pm42 sont des conseils d'ordre pratique pour l'aide sur le forum (il est plus aisé de copier du texte que de recopier le code d'une capture, et les balises de code conservent la mise en page (les indentations) et indiquent qu'il s'agit d'un code, donc plus facile pour tout.
    Oui et pour la même raison, pour quelqu'un qui code en python régulièrement, voir des majuscules complique la lecture : elles sont normalement utilisées pour les noms de classes, pas de variables.

    C'est vrai dans tous les langages mais comme un des gros intérêts de Python est son écosystème et le fait que beaucoup de choses y reposent sur des normes de codage, il est important de les appliquer le plus tôt possible.

    Mais je m'excuse d'avoir voulu aider en donnant des informations factuelles sans manifester l'immense respect du au primo-posteur qui voulait juste une réponse toute cuite enrobée dans du papier cadeau avec le sourire de la crèmière.
    Je ne le ferai plus.

Discussions similaires

  1. [Python] utilisation de odeint
    Par Pythoon dans le forum Programmation et langages, Algorithmique
    Réponses: 0
    Dernier message: 14/02/2019, 09h03
  2. Python, petite questions sur les dictionnaires
    Par NetM dans le forum Programmation et langages, Algorithmique
    Réponses: 1
    Dernier message: 05/12/2018, 19h03
  3. Firefox 2.0.0.2 -- Dictionnaires
    Par kymoi dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 24/02/2007, 06h02
  4. hésitation entre deux dictionnaires
    Par Seirios dans le forum Lectures scientifiques
    Réponses: 0
    Dernier message: 31/10/2006, 17h09
  5. dictionnaires de physique?
    Par Vladzol dans le forum Lectures scientifiques
    Réponses: 7
    Dernier message: 09/10/2006, 12h05