Aller au contenu

Exercices d'entraînement

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 ?
Rappels
  • Chaque programme Python doit être sauvegardé sous forme de fichier texte avec l'extension .py.
    Enregistrez ce fichier dans le dossier [NSI_Tables_Donnees] avec le nom donné à l'exercice : ProgC01.51.py, ProgC01.52.py, etc...
  • Pour exécuter ce programme, il suffit de le sauvegarder puis d'appuyer sur la touche [F5].
  • Le programme principal doit contenir des tests personnalisés :
    ##----- Programme principal et tests -----##
    if __name__ == '__main__':
        # Placer les tests ici
    

Dans les exercices de cette page, on part de la table de données (tableau de dictionnaires) Courses définie par :

1
2
3
Courses = [{'Code': 88, 'Nom': 'Pommes', 'Prix': 1.5, 'Quantité': 3.2},
           {'Code': 157, 'Nom': 'Poires', 'Prix': 2.55, 'Quantité': 1.2},
           {'Code': 72, 'Nom': 'Pêches', 'Prix': 3.74, 'Quantité': 0.5}]

ProgC01.51

Créez un programme permettant d'exporter la table Courses dans le fichier Courses01.csv :

Code Nom Prix Quantité
88 Pommes 1.5 3.2
157 Poires 2.55 1.2
72 Pêches 3.74 0.5
Une solution
1
2
3
4
5
6
7
from fonctions_csv import *

Courses = [{'Code': 88, 'Nom': 'Pommes', 'Prix': 1.5, 'Quantité': 3.2},
           {'Code': 157, 'Nom': 'Poires', 'Prix': 2.55, 'Quantité': 1.2},
           {'Code': 72, 'Nom': 'Pêches', 'Prix': 3.74, 'Quantité': 0.5}]

exporte_csv(Courses, 'Courses01.csv', ['Code', 'Nom','Prix','Quantité'])

ProgC01.52

À la suite du programme précédent, on ajoute la ligne :

9
    nouvel_achat = {'Code': 49, 'Nom': 'Abricots', 'Prix': 4.2, 'Quantité': 1.75}

  1. Enregistrez ce programme sous le nom ProgC01.52.py.

  2. Complétez ce programme par les instructions permettant d'ajouter à la liste initiale de courses les abricots, de code 49, coûtant 4,20 euros par kilogramme sachant qu'on en a acheté 1,75 kg.

  3. Exportez la nouvelle table obtenue sous la forme d'un fichier CSV intitulé Courses02.csv.

    Une solution
     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    from fonctions_csv import *
    
    Courses = [{'Code': 88, 'Nom': 'Pommes', 'Prix': 1.5, 'Quantité': 3.2},
               {'Code': 157, 'Nom': 'Poires', 'Prix': 2.55, 'Quantité': 1.2},
               {'Code': 72, 'Nom': 'Pêches', 'Prix': 3.74, 'Quantité': 0.5}]
    
    exporte_csv(Courses, 'Courses01.csv', ['Code', 'Nom','Prix','Quantité'])
    
    nouvel_achat = {'Code': 49, 'Nom': 'Abricots', 'Prix': 4.2, 'Quantité': 1.75}
    Courses.append(nouvel_achat)
    
    exporte_csv(Courses, 'Courses02.csv', ['Code', 'Nom','Prix','Quantité'])
    

ProgC01.53

  1. Copiez, collez et enregistrez sous le nom ProgC01.53.py le code suivant :

     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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    from fonctions_csv import *
    
    def ajoute_prix_paye(table, attribut1, attribut2):
        """
        table - list, Table de données représentée par un tableau de dictionnaires
                      ayant les mêmes clés
        attribut1, attribut2 - str, chaînes de caractères étant deux clés de cette
                               table et dont les valeurs sont des nombres
        Sortie: None - Modifie table en ajoutant une nouvelle clef correspondant au
                produit des valeurs des attributs passés en paramètre
                (fonction à effet de bord)
        """
        pass
    
    
    def prix_total(table, attribut):
        """
        table - list, Table de données représentée par un tableau de dictionnaires
                      ayant les mêmes clés
        attribut - str, chaîne de caractères étant une clé de cette table dont les
                   valeurs sont des nombres
        Sortie: int ou float - La somme des valeurs de la clé attribut
        """
        pass
    
    
    ##----- Programme Principal -----##
    if __name__ == '__main__':
        Courses = [ {'Code': 88, 'Nom': 'Pommes', 'Prix': 1.5, 'Quantité': 3.2},
                    {'Code': 157, 'Nom': 'Poires', 'Prix': 2.55, 'Quantité': 1.2},
                    {'Code': 72, 'Nom': 'Pêches', 'Prix': 3.74, 'Quantité': 0.5},
                    {'Code': 49, 'Nom': 'Abricots', 'Prix': 4.2, 'Quantité': 1.75}]
    
        ajoute_prix_paye(Courses, 'Prix', 'Quantité')
        # Export du fichier Courses03.csv
    
    
        print(prix_total(Courses, 'Prix Payé'))
    

  2. Complétez la définition de la fonction ajoute_prix_paye() :

     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    def ajoute_prix_paye(table, attribut1, attribut2):
        """
        table - list, Table de données représentée par un tableau de dictionnaires
                      ayant les mêmes clés
        attribut1, attribut2 - str, chaînes de caractères étant deux clés de cette
                               table et dont les valeurs sont des nombres
        Sortie: None - Modifie table en ajoutant une nouvelle clef correspondant au
                produit des valeurs des attributs passés en paramètre
                (fonction à effet de bord)
        """
    

    Fichier à obtenir

    L'appel ajoute_prix_paye(Courses, 'Prix', 'Quantité') renvoie la table ci-dessous :

    Code Nom Prix Quantité Prix Payé
    88 Pommes 1.5 3.2 4.8
    157 Poires 2.55 1.2 3.06
    72 Pêches 3.74 0.5 1.87
    49 Abricots 4.2 1.75 7.35

    Une piste

    Vous pouvez utiliser la fonction round(valeur, 2) pour arrondir le flottant valeur à deux chiffres après la virgule.

    Une solution
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    def ajoute_prix_paye(table, attribut1, attribut2):
        """
        table - list, Table de données représentée par un tableau de dictionnaires
                      ayant les mêmes clés
        attribut1, attribut2 - str, chaînes de caractères étant deux clés de cette
                               table et dont les valeurs sont des nombres
        Sortie: None - Modifie table en ajoutant une nouvelle clef correspondant au
                produit des valeurs des attributs passés en paramètre
                (fonction à effet de bord)
        """
        for ligne in table:
            prix = ligne[attribut1]*ligne[attribut2]
            ligne['Prix Payé'] = round(prix, 2)
    
  3. Exportez la liste obtenue sous la forme d'un fichier CSV intitulé Courses03.csv.

    Une solution
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    ##----- Programme Principal -----##
    if __name__ == '__main__':
        Courses = [ {'Code': 88, 'Nom': 'Pommes', 'Prix': 1.5, 'Quantité': 3.2},
                    {'Code': 157, 'Nom': 'Poires', 'Prix': 2.55, 'Quantité': 1.2},
                    {'Code': 72, 'Nom': 'Pêches', 'Prix': 3.74, 'Quantité': 0.5},
                    {'Code': 49, 'Nom': 'Abricots', 'Prix': 4.2, 'Quantité': 1.75}]
    
        ajoute_prix_paye(Courses, 'Prix', 'Quantité')
        exporte_csv(Courses, 'Courses03.csv', ['Code', 'Nom','Prix','Quantité', 'Prix Payé'])
    
        print(prix_total(Courses, 'Prix Payé'))
    
  4. Complétez la définition de la fonction PrixTotal() :

    17
    18
    19
    20
    21
    22
    23
    24
    def prix_total(table, attribut):
        """
        table - list, Table de données représentée par un tableau de dictionnaires
                      ayant les mêmes clés
        attribut - str, chaîne de caractères étant une clé de cette table dont les
                   valeurs sont des nombres
        Sortie: int ou float - La somme des valeurs de la clé attribut
        """
    
    Vérifiez que cet achat de courses coûte 17,08 euros.

    Une solution
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    def prix_total(table, attribut):
        """
        table - list, Table de données représentée par un tableau de dictionnaires
                      ayant les mêmes clés
        attribut - str, chaîne de caractères étant une clé de cette table dont les
                   valeurs sont des nombres
        Sortie: int ou float - La somme des valeurs de la clé attribut
        """
        prix = 0
        for ligne in table:
            prix += ligne[attribut]
        return prix