Des exercices de sélection avec Python

Agrégation et sélection (exercices avec Python)

Quelques exercices corrigés de niveau première et de difficulté progressive pour s’entraîner avec Python.

 

Données

Le jeu de données est le fichier russes.csv que vous pouvez copier-coller à partir de la page d’agrégats avec Python.

import csv
fichier = open("russes.csv", encoding="utf-16")  # ou utf-8 selon ton cas
table = list(csv.DictReader(fichier))
fichier.close()

La table, nommée table, est donc une liste de dictionnaires.

Dans les exercices ci-dessous, on ne présentera que les fonctions. Libre à vous d’ajouter les instructions d’affichage pour vérification…

 

Exercice 1

La réalisation de cet exercice suppose la lecture préalable de la page sur les agrégats avec Python.

Compter le nombre de peintres (Domaine peinture).

Corrigé

Exercice simple pour s’échauffer ! C’est un comptage avec condition.

def compter_peinture(table):
    compteur = 0

    for personne in table:
        if personne["Domaine"] == "peinture":
            compteur += 1

    return compteur

Piège : ne pas confondre = et ==.

 

Exercice 2

La réalisation de cet exercice et des suivants suppose la lecture préalable de la page sur les sélections avec Python.

Afficher les noms des personnes des domaines peinture ou musique.

Corrigé

def musique_ou_peinture(table):
    resultat = []

    for personne in table:
        domaine = personne["Domaine"]

        if domaine == "musique" or domaine == "peinture":
            resultat.append(personne["Nom"])

    return resultat

Attention à ne pas écrire if domaine == "musique" or "peinture":

Notez qu’en langage courant, on aurait parlé des domaines peinture ET musique, ce qui aurait été piégeux !

 

Exercice 3

Afficher les noms des personnes nées entre 1850 et 1900.

Corrigé

def nes_entre(table):
    resultat = []

    for personne in table:
        annee = int(personne["Naissance"])

        if 1850 <= annee <= 1900:
            resultat.append(personne["Nom"])

    return resultat

 

Exercice 4

Créer une fonction qui renvoie une table contenant uniquement :

  • les personnes du domaine peinture
  • avec seulement les colonnes Nom et Naissance.

Corrigé

def peinture_nom_naissance(table):
    resultat = []

    for personne in table:
        if personne["Domaine"] == "peinture":
ligne = {
                "Nom": personne["Nom"],
                "Naissance": personne["Naissance"]
            }
            resultat.append(ligne)

    return resultat

Pièges : oublier de créer un nouveau dictionnaire et modifier la table originale.

 

Exercice 5

Afficher les noms des personnes :

  • nées avant 1900
  • ET appartenant à littérature OU musique.

Corrigé

def selection_complexe(table):
    resultat = []

    for personne in table:
        annee = int(personne["Naissance"])
        domaine = personne["Domaine"]

        if annee < 1900 and (domaine == "littérature" or domaine == "musique"):
            resultat.append(personne["Nom"])

    return resultat

Piège : l’oubli des parenthèses !