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

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. Contributeur Ambassadeur
    bonjour,
    ton code fonctionne bien?
    0
    1. Modérateur
      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