Exercices d'entraînement
Tris☘
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 ?
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.61☘
Le programme à définir dans cet exercice est à appliquer uniquement à la table
de données issue du fichier personnes.csv
.
Rédigez un programme qui permette d'obtenir la table nommée table_personnes2
qui correspond au tri de la table table_personnes
selon l'ordre croissant des
années de naissance puis l'ordre croissant des noms de famille.
Projetez cette table uniquement sur les noms et prénoms des personnes puis
affichez cette table dans la console dictionnaire par dictionnaire.
Affichage à obtenir
{'nom': 'Patamob', 'prenom': 'Alphonse'},
{'nom': 'Verse', 'prenom': 'Alain'},
{'nom': 'Ainé', 'prenom': 'Ali'},
{'nom': 'Etpan', 'prenom': 'Ahmed'},
{'nom': 'Térieur', 'prenom': 'Alex'},
{'nom': 'Ficulté', 'prenom': 'Andy'},
{'nom': 'Dajeun', 'prenom': 'Bruno'},
{'nom': 'Boréal', 'prenom': 'Aurore'},
{'nom': 'Gemlamorte', 'prenom': 'Adèle'},
{'nom': 'Nor', 'prenom': 'Paul'},
{'nom': 'Térieur', 'prenom': 'Alain'},
{'nom': 'Hiple', 'prenom': 'Candice'},
{'nom': 'Labrosse', 'prenom': 'Adam'},
{'nom': 'Proviste', 'prenom': 'Alain'},
{'nom': 'Rectdustade', 'prenom': 'Andy'},
{'nom': 'Auboisdormant', 'prenom': 'Abel'},
{'nom': 'Bistraux', 'prenom': 'Alonzo'},
{'nom': 'Ception', 'prenom': 'Alex'},
{'nom': 'Dejeu', 'prenom': 'Bernadette'},
{'nom': 'Gator', 'prenom': 'Ali'},
{'nom': 'Verserre', 'prenom': 'Annie'}
Une solution
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
|
ProgC02.62☘
On considère les notes de quatre élèves obtenus lors de trois contrôles :
1 2 3 4 |
|
-
Définissez le tableau
notes_triees
qui correspond au tableaunotes
trié par ordre croissant des résultats du premier contrôle.Résultat à obtenir
>>> notes_triees [{'Prenom': 'Laurent', 'C1': 2, 'C2': 18, 'C3': 15}, {'Prenom': 'Julie', 'C1': 2, 'C2': 11, 'C3': 12}, {'Prenom': 'Zoé', 'C1': 8, 'C2': 12, 'C3': 9}, {'Prenom': 'Brahim', 'C1': 14, 'C2': 13, 'C3': 17}]
Une solution
On définit une fonction
C1()
qui va servir de critère de tri à la fonctionsorted()
: le tri n'est pas en place...1 2 3 4 5 6 7 8 9 10
def C1(dico): return dico["C1"] ##----- Programme principal -----## notes = [ {"Prenom": "Zoé", "C1": 8, "C2": 12, "C3": 9}, {"Prenom": "Laurent", "C1": 2, "C2": 18, "C3": 15}, {"Prenom": "Brahim", "C1": 14, "C2": 13, "C3": 17}, {"Prenom": "Julie", "C1": 2, "C2": 11, "C3": 12}] notes_triees = sorted(notes, key=C1)
-
Définissez le tableau
notes_triees2
qui correspond au tableaunotes
trié selon les résultats du premier contrôle et par ordre alphabétique de prénom.Résultat à obtenir
>>> notes_triees2 [{'Prenom': 'Julie', 'C1': 2, 'C2': 11, 'C3': 12}, {'Prenom': 'Laurent', 'C1': 2, 'C2': 18, 'C3': 15}, {'Prenom': 'Zoé', 'C1': 8, 'C2': 12, 'C3': 9}, {'Prenom': 'Brahim', 'C1': 14, 'C2': 13, 'C3': 17}]
Une solution
On définit une fonction
C1_prenom()
qui va servir de critère de tri à la fonctionsorted()
: le tri n'est pas en place...1 2 3 4 5 6 7 8 9 10
def C1_prenom(dico): return dico["C1"], dico["Prenom"] ##----- Programme principal -----## notes = [ {"Prenom": "Zoé", "C1": 8, "C2": 12, "C3": 9}, {"Prenom": "Laurent", "C1": 2, "C2": 18, "C3": 15}, {"Prenom": "Brahim", "C1": 14, "C2": 13, "C3": 17}, {"Prenom": "Julie", "C1": 2, "C2": 11, "C3": 12}] notes_triees2 = sorted(notes, key=C1_prenom)
Remarque
Lorsque le tri est effectué « en place » à l'aide de la méthode
.sort()
, on peut conserver la fonctionC1()
puis créer la fonctionprenom()
renvoyant comme critère la valeur de la clé'Prenom'
d'un dictionnaire :
En appliquant successivement le tri à la table4 5
def prenom(dico): return dico["Prenom"]
notes
, d'abord avec le critère de la fonctionprenom()
, puis avec le critère de la fonctionC1()
, on obtient le même résultat que ci-dessus (en modifiant la tablenotes
plutôt qu'en créant une nouvelle table) :1 2
notes.sort(key=prenom) notes.sort(key=C1)
Puis, dans la console :
>>> notes [{'Prenom': 'Julie', 'C1': 2, 'C2': 11, 'C3': 12}, {'Prenom': 'Laurent', 'C1': 2, 'C2': 18, 'C3': 15}, {'Prenom': 'Zoé', 'C1': 8, 'C2': 12, 'C3': 9}, {'Prenom': 'Brahim', 'C1': 14, 'C2': 13, 'C3': 17}]
L'ordre du tri précédent est conservé car le tri appliqué par Python est dit stable :
« si deux éléments sont égaux vis-à-vis du tri appliqué, alors ils restent dans l'ordre dans lequel ils étaient au départ. »Vous pouvez lire, par exemple, ce paragraphe de wikipedia pour en savoir plus sur cette notion.
ProgC02.63☘
On reprend le tableau de notes :
1 2 3 4 |
|
Rédigez un programme qui permette d'obtenir la table de notes nommées
notes2
et triée par ordre croissant selon la moyenne aux trois contrôles.
Résultat à obtenir
>>> notes2
[{'Prenom': 'Julie', 'C1': 2, 'C2': 11, 'C3': 12},
{'Prenom': 'Zoé', 'C1': 8, 'C2': 12, 'C3': 9},
{'Prenom': 'Laurent', 'C1': 2, 'C2': 18, 'C3': 15},
{'Prenom': 'Brahim', 'C1': 14, 'C2': 13, 'C3': 17}]
Une solution
1 2 3 4 5 6 7 8 9 10 |
|