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

Fermé
UnTacosMoisi - Modifié le 1 mars 2022 à 18:03
mamiemando Messages postés 33499 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 janvier 2025 - 1 mars 2022 à 18:13
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

yg_be Messages postés 23450 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 30 janvier 2025 Ambassadeur 1 564
25 févr. 2022 à 15:09
bonjour,
ton code fonctionne bien?
0
mamiemando Messages postés 33499 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 28 janvier 2025 7 818
1 mars 2022 à 18:13
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