Villes⚓︎
D'après 2022, Nouvelle-Calédonie, J1, Ex. 3
Partie 1⚓︎
Dans un fichier villes_56.csv
, on a regroupé les neufs villes du Morbihan de plus de \(10\,000\) habitants en 2012.
Fichier villes_56.csv
dep | nom | nb_hab_1999 | nb_hab_2012 | densite | superficie | alt_min | alt_max |
---|---|---|---|---|---|---|---|
56 | Lorient | 59224 | 58100 | 3272 | 17.48 | 0 | 46 |
56 | Vannes | 51759 | 53000 | 1625 | 32.3 | 0 | 56 |
56 | Lanester | 21901 | 22500 | 1209 | 18.37 | 0 | 51 |
56 | Ploemeur | 18301 | 18200 | 448 | 39.72 | -1 | 55 |
56 | Hennebont | 13410 | 14600 | 818 | 18.57 | 0 | 82 |
56 | Pontivy | 13501 | 13700 | 553 | 24.85 | 48 | 192 |
56 | Auray | 10899 | 12500 | 1783 | 6.91 | 0 | 43 |
56 | Guidel | 9155 | 10100 | 198 | 52.29 | 0 | 70 |
56 | Saint-Avé | 8298 | 10100 | 400 | 26.09 | 12 | 136 |
1) On exécute le programme suivant :
Programme 1 | |
---|---|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
|
1.a) À partir des quatre propositions ci-dessous, indiquer ce que signifie "utf-8"
à la ligne 5.
- Réponse A : type de codage de caractères informatiques
- Réponse B : nom du dossier contenant le fichier
- Réponse C : nom du fichier
- Réponse D : taille du fichier
Réponse
Il s'agit de la réponse A, l'encodage des caractères utilisé dans le fichier
1.b) Indiquer ce que signifie le mode='r'
à la ligne 5.
Réponse
Il s'agit du mode d'ouverture du fichier :
'r'
(pour read) signifie que le fichier est ouvert en lecture seule.
Les autres modes possibles sont :
'w'
(pour write) mode d'accès en écriture avec effacement du contenu si le fichier existe déjà,'a'
(pour append) mode d'accès en écriture avec ajout en fin de fichier si le fichier existe déjà.
2) Après exécution du Programme 1, voici le début de l'affichage obtenu :
[{'dep': '56',
'nom': 'Lorient',
'nb_hab_1999': '59224',
'nb_hab_2012': '58100',
'densite': '3272',
'superficie': '17.48',
'alt_min': '0',
'alt_max': '46'},
{'dep': '56', ...}]
2.a) Indiquer le type Python de la variable villes
.
Réponse
La variable villes
référence un objet de type list
; dont les éléments sont des dictionnaires.
2.b) Indiquer ce que renvoie villes[1]
en précisant son type.
Réponse
villes[1]
renvoie le dictionnaire (type dict
) d'indice 1 de la liste :
{'dep': '56',
'nom': 'Vannes',
'nb_hab_1999': '51759',
'nb_hab_2012': '53000',
'densite': '1625',
'superficie': '32.3',
'alt_min': '0',
'alt_max': '56 '}
2.c) Écrire une instruction permettant d'obtenir le nombre d'habitants de Pontivy en 2012.
Réponse
Pour obtenir le nombre d'habitants de Pontivy en 2012, et en considérant que l'ordre du tableau csv est bien respecté :
villes[5]['nb_hab_2012']
Si on ne sait pas que la ville de Pontivy est à l'indice \(5\), alors on peut faire :
for ville in villes:
if ville['nom'] == 'Pontivy':
print(ville['nb_hab_2012'])
Partie 2⚓︎
On considère que villes
résulte de l'exécution du Programme 1, et on suppose qu'ensuite, avec un traitement, les données figurant dans les colonnes 2 à 7 du tableau villes
sont des entiers ou des flottants.
1) Indiquer ce que renvoie l'expression suivante appliquée à villes
:
>>> [(d['nom'], d['alt_max']) for d in villes if d['alt_max'] > 100]
Réponse
On obtient la liste des couples constitués d'un nom de ville et de son altitude maximale, pour les villes ayant une altitude maximale supérieure à 100. Soit :
[('Pontivy', 192), ('Saint-Avé', 136)]
2) Écrire en langage Python une fonction variations
qui prend en paramètre une liste de villes (du même type que la variable villes
) et renvoie la différence entre le nombre d'habitants en 2012 et celui en 1999 cumulée pour toutes les villes.
Réponse
def variations(villes: list):
nb_hab_total_1999 = 0
nb_hab_total_2012 = 0
for ville in villes:
nb_hab_total_1999 += ville['nb_hab_1999']
nb_hab_total_1999 += ville['nb_hab_2012']
return nb_hab_total_2012 - nb_hab_total_1999
Où en une ligne avec la fonction prédéfinie sum
:
def variations(villes: list):
return sum(ville['nb_hab_1999'] - ville['nb_hab_2012'] for ville in villes)
3) On admet que toutes les villes sont de superficie distincte. Écrire en langage Python une fonction max_superficie
qui prend en paramètre une liste de villes (du même type que la variable villes
) et renvoie la ville ayant la plus grande superficie.
Réponse
def max_superficie(villes: list):
plus_grande_ville = villes[0]
maxi = plus_grande_ville['superficie']
for ville in villes:
superficie_courante = ville['superficie']
if superficie_courante > maxi:
maxi = superficie_courante
plus_grande_ville = ville
return plus_grande_ville
Remarquons que si on avait juste voulu le nom de la ville ayant la plus grande superficie, il aurait fallu mettre en dernière ligne :
return plus_grande_ville['nom']