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

UnTacosMoisi -  
mamiemando Messages postés 33758 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.
A voir également:

2 réponses

yg_be Messages postés 23541 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 584
 
bonjour,
ton code fonctionne bien?
0
mamiemando Messages postés 33758 Date d'inscription   Statut Modérateur Dernière intervention   7 877
 
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