[ PROJET NSI ] Sélectionner des valeurs selon un critère.

UnTacosMoisi -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour, mon problème est simple à comprendre mais difficile à expliquer.

Pour un projet en NSI, j'ai à ma disposition un fichier excel contenant toutes les villes du monde et leur population respective.

Pour l'un des exercices, on me demande d' "écrire une fonction PopPays(T),T étant une table contenant les attributs CodePays et Population, qui renvoie le dictionnaire:
{'CodePays1':population pays1,'CodePays2':population pays2, 'CodePays3':population pays3,..}

dont les clés sont les codes des pays de la table T et les valeur leur population respective."


J'ai réussi à rassembler les villes dans un seul
CodePays
. Cependant, je ne sais pas comment m'y prendre pour faire la somme des populations des villes d'un même pays.

Pour ma part, j'ai pensé à écrire une fonction du style :

def Test(T):
 stock = 0
 for e in T:
    for a in range(...):
       if item[a] == item[a+1]:
          stock = e["Population"] + stock
       else:
          return None


De cette façon, lorsque deux (ou plus) villes d'un même pays se succèdent, je fais la somme de leur population.

On ne m'indique pas d'erreur ni de solution non-plus.

Merci si vous parveniez à m'expliquer le problème ou me proposer des idées alternatives.

2 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    bonjour,
    ton code fonctionne bien?
    0
  2. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 940
     
    Bonjour,

    Plusieurs remarques :
    • peux-tu clarifier est la forme de la table
      T
      (quitte à donner les premières lignes) ?
    • ta fonction s'appelle
      Test
      mais ton énoncé parle de
      PopPays
      ;
    • ton code inclue
      range(...)
      mais tu n'as pas précisé quoi mettre à la place de
      ...
      ;
    • dans ton code tu crées une variable
      stock
      que tu retournes (donc un entier) alors qu'on te demande de retourner un dictionnaire.
    • pour ton exercice le plus pratique serait d'utiliser un
      defaultdict
      comme ça tu peux directement incrémenter la population si le pays n'y figure pas (si tu préfères utiliser un
      dict
      , il faudra vérifier si le pays figure dans les clés et incrémenter/initialiser la population totale en fonction)


    Un petit exemple pour démarrer

    from collections import defaultdict
    
    def PopPays(T):
        d = defaultdict(int)
        d["Brésil"] += 10000
        d["Brésil"] += 200000
        d["France"] += 30000
        print(d)
        return d


    Tu l'auras compris, il suffit à présent d'itérer sur
    T
    pour extraire le pays de la ville et sa population pour corriger le contenu de
    d
    .

    Bonne chance
    0