Exercices d'entraînement
Recherche☘
Ces exercices doivent être utilisés pour vous entraîner à programmer. Ils sont généralement accompagnés d'aide et de leur solution pour vous permettre de progresser.
Avant de vous précipiter sur ces solutions dès la première difficulté, n'oubliez pas les conseils suivants :
- Avez-vous bien fait un schéma au brouillon pour visualiser le problème posé ?
- Avez-vous essayé de rédiger un algorithme en français, avec vos propres mots, avant de vous lancer dans la programmation sur machine ?
- Avez-vous utilisé des affichages intermédiaires, des
print()
, pour visualiser au fur et à mesure le contenu des variables ? - Avez-vous testé le programme avec les propositions de tests donnés dans l'exercice ?
- Avez-vous testé le programme avec de nouveaux tests, différents de ceux proposés ?
Pour tester les exercices de cette page vous pourrez faire appel aux fichiers
personnes.csv
et Zelda_Consoles.csv
.
Attention
- Ne pas oublier de sauvegarder les fichiers dans le répertoire
[NSI_Tables_Donnees]
. - Ne pas oublier d'importer le module
fonctions_csv
. - Ne pas oublier d'importer les fichiers CSV en tableau de dictionnaires pour pouvoir utiliser les fonctions...
ProgC02.51☘
Pour pouvoir utiliser les fonctions est_presente()
, recupere_valeur()
et
compte_valeur()
du module fonctions_csv.py
, il faut être sûr que l'attribut
passé en paramètre appartienne bien à la table passée en paramètre.
Pour le vérifier, complétez la définition de la fonction est_attribut()
:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
|
Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
|
Une autre solution
Il est temps de commencer à penser à ce genre de solution...
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
ProgC02.52☘
Complétez la définition de la fonction recupere_tab_valeurs()
qui renvoie
un tableau constitué de toutes les valeurs de attribut2
lorsque, dans la
table
, une des valeurs de l'attribut attribut1
est valeur1
.
3 4 5 6 7 8 9 10 11 |
|
Exemple
On nomme table_personnes
le tableau de dictionnaires dans lequel est
stockée le fichier personnes.csv
.
>>> recupere_tab_valeurs(table_personnes, 'prenom', 'Alain', 'annee_naissance')
['1999', '2000', '1970']
Une solution
Il faut faire attention au **type de la variable valeur
. Pour l'instant,
nous ne faisons que vérifier des valeurs donc on peut tester des égalités
sur les chaînes de caractères. Ce ne sera pas le cas dans le prochain
exercice.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
|
Une autre solution
En utilisant une liste définie en compréhension :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
ProgC02.53☘
La fonction à définir dans cet exercice est à appliquer uniquement à la table
de données issue du fichier personnes.csv
.
Complétez la définition age_moyen()
qui renvoie, pour l'annee_actuelle
,
l'âge moyen (arrondi à 0,1 près) d'un ensemble de personnes dont on connaît
l'année de naissance stockée dans l'attribut annee_naissance
.
3 4 5 6 7 8 9 10 11 12 |
|
Une solution
On fait appel à la fonction attributs_entiers()
pour convertir l'attribut
'annee_naissance'
de la table table_personnes
.
from fonctions_csv import *
def age_moyen(table, annee_naissance, annee_actuelle):
"""
table - list, Table de données représentée par un tableau de dictionnaires
ayant les mêmes clés
annee_naissance - attribut (clé) de cette table ayant des valeurs entières (des années)
annee_actuelle - entier, représentant une année
Sortie: float - âge moyen des individus représentés dans la table,
lors de l'année actuelle
"""
somme_ages = 0
# on admet que toutes les personnes sont distinctes
nb_personnes = len(table)
for dico in table:
age = annee_actuelle - dico[annee_naissance]
somme_ages = somme_ages + age
return round(somme_ages/nb_personnes, 1)
##----- Programme principal -----##
if __name__ == '__main__':
table_personnes = importe_csv('personnes.csv')
attributs_entiers(table_personnes, 'annee_naissance')
print(age_moyen(table_personnes, 'annee_naissance', 2022))