đŸŒČ SĂ©ance 2.3 - Tableaux avancĂ©s
Cours · Semaine 2 - Programmation modulaire · Mission : ForĂȘt borĂ©ale

Compétence 0F01 : Développer des programmes informatiques en vue d'automatiser la résolution de problÚmes dans un contexte scientifique.

Objectifs de la séance¶

  • Associer des clĂ©s Ă  des valeurs avec un dictionnaire
  • Modifier, parcourir et compter avec un dictionnaire
  • Organiser des donnĂ©es en tableau Ă  deux dimensions (liste de listes)
  • Parcourir un tableau 2D avec des boucles imbriquĂ©es
  • Calculer sur des tableaux numĂ©riques avec numpy

Contenus essentiels¶

  • Utilisation des structures de donnĂ©es : dictionnaire, tableau 2D
  • Tableaux numĂ©riques et calcul vectorisĂ© avec numpy
  • Organiser les donnĂ©es en mĂ©moire

Calepin Colab. Exécutez chaque bloc de code avec Maj+Entrée. Modifiez, expérimentez, recommencez : c'est en programmant qu'on apprend à programmer.

🗂 1. Le dictionnaire : associer une clĂ© Ă  une valeur¶

Un dictionnaire range des paires cle: valeur, entre accolades { }. On accÚde à une valeur par sa clé (et non par un indice). Parfait pour décrire un échantillon par ses propriétés nommées.

In [ ]:
echantillon = {
    'nom': 'eau distillée',
    'masseVolumique': 1.00,
    'pH': 7.0,
}

print(echantillon['nom'])
print('pH :', echantillon['pH'])

🔄 2. Modifier et parcourir un dictionnaire¶

On ajoute ou modifie une valeur par sa clé, et on parcourt les paires avec .items().

In [ ]:
echantillon = {'nom': 'eau distillée', 'pH': 7.0}
echantillon['temperature'] = 21.5    # ajout d'une clé
echantillon['pH'] = 7.2              # modification

for cle, valeur in echantillon.items():
    print(cle, ':', valeur)

🔱 3. Compter avec un dictionnaire¶

Schéma trÚs utile : compter les occurrences. Ici, le nombre d'échantillons par catégorie.

In [ ]:
categories = ['acide', 'base', 'acide', 'neutre', 'acide', 'base']
compte = {}
for categorie in categories:
    if categorie in compte:
        compte[categorie] = compte[categorie] + 1
    else:
        compte[categorie] = 1
print(compte)

🧼 4. Le tableau Ă  deux dimensions¶

Un tableau 2D est une liste dont chaque Ă©lĂ©ment est lui-mĂȘme une liste : une grille de lignes et de colonnes. IdĂ©al pour un tableau de mesures (une ligne par Ă©chantillon, une colonne par grandeur).

In [ ]:
# Chaque ligne : [temperature, pression] d'un relevé
releves = [
    [20.1, 101.3],
    [21.5, 101.1],
    [19.8, 101.4],
]

print('Relevé complet :', releves[0])
print('Température du 2e relevé :', releves[1][0])
print('Pression du 3e relevé  :', releves[2][1])

🔍 5. Parcourir un tableau 2D¶

On utilise une boucle pour les lignes, et à l'intérieur on accÚde aux colonnes. Ici on calcule la température moyenne sur tous les relevés.

In [ ]:
releves = [[20.1, 101.3], [21.5, 101.1], [19.8, 101.4]]

sommeTemperatures = 0
for ligne in releves:
    sommeTemperatures = sommeTemperatures + ligne[0]

moyenneTemperature = sommeTemperatures / len(releves)
print('Température moyenne :', moyenneTemperature)

📊 6. numpy : le tableau du calcul scientifique¶

La bibliothĂšque numpy fournit un tableau numĂ©rique optimisĂ©. Une opĂ©ration s'applique d'un coup Ă  tout le tableau (sans boucle), et des fonctions toutes prĂȘtes calculent moyenne, Ă©cart-type, etc. C'est l'outil de base du calcul scientifique en Python.

In [ ]:
import numpy as np

mesures = np.array([20.1, 21.5, 19.8, 22.3, 20.9])
print('Moyenne    :', mesures.mean())
print('Écart-type :', mesures.std())
print('Chaque mesure + 1 :', mesures + 1)   # calcul vectorisé, sans boucle

📐 7. numpy en deux dimensions¶

Un tableau 2D numpy permet d'extraire une colonne entiĂšre d'un coup avec [:, indiceColonne], puis d'y appliquer directement une statistique.

In [ ]:
import numpy as np

grille = np.array([
    [20.1, 101.3],
    [21.5, 101.1],
    [19.8, 101.4],
])

temperatures = grille[:, 0]    # toute la 1re colonne
print('Colonne température :', temperatures)
print('Température moyenne :', temperatures.mean())

📌 Rappel de vocabulaire. Le dictionnaire porte plusieurs noms selon les langages : on l'appelle aussi tableau associatif, table de hachage ou hashmap (en anglais). C'est exactement la mĂȘme structure : on range des paires clĂ© → valeur et on retrouve une valeur par sa clĂ©, jamais par un indice de position.

đŸ§Ș EXERCICES (obligatoires)
Le **dictionnaire** et **numpy**. Ces **5 exercices sont à remettre**. Complétez les cellules marquées `# A COMPLETER`.

Obligatoire 1. Créez un dictionnaire (tableau associatif) décrivant une planÚte : nom, rayon en km, nombre de lunes. Affichez ensuite chaque propriété sur une ligne.

In [ ]:
# A COMPLETER (obligatoire 1)

Obligatoire 2. On vous donne echantillon = {'nom': 'eau', 'pH': 7.0}. Ajoutez une clé temperature valant 21.5, modifiez le pH à 7.2, puis affichez le dictionnaire complet.

In [ ]:
# A COMPLETER (obligatoire 2)
echantillon = {'nom': 'eau', 'pH': 7.0}

Obligatoire 3. À partir de mesures = ['rouge', 'bleu', 'rouge', 'vert', 'bleu', 'rouge'], construisez un dictionnaire donnant le nombre d'occurrences de chaque couleur (c'est une table de hachage de comptage).

In [ ]:
# A COMPLETER (obligatoire 3)
mesures = ['rouge', 'bleu', 'rouge', 'vert', 'bleu', 'rouge']

Obligatoire 4. Avec numpy, créez un tableau à partir de [20.1, 21.5, 19.8, 22.3, 20.9], puis affichez sa moyenne et son écart-type.

In [ ]:
# A COMPLETER (obligatoire 4)
import numpy as np

Obligatoire 5. À partir d'un tableau numpy de tempĂ©ratures en Celsius [0, 25, 37, 100], calculez d'un seul coup (sans boucle) les mĂȘmes tempĂ©ratures en Fahrenheit. Formule : F = C * 9 / 5 + 32.

In [ ]:
# A COMPLETER (obligatoire 5)
import numpy as np
🚀 EXERCICES (intermĂ©diaires, facultatifs)
Les **tableaux 2D** et un peu plus de numpy. À faire une fois les obligatoires terminĂ©s.

IntermĂ©diaire 1. À partir de notes = [[15, 12], [18, 9], [11, 20]] (chaque ligne : deux examens d'un Ă©tudiant), calculez et affichez la moyenne de chaque Ă©tudiant.

In [ ]:
# A COMPLETER (intermédiaire 1)
notes = [[15, 12], [18, 9], [11, 20]]

IntermĂ©diaire 2. À partir de la grille grille = [[3, 8, 2], [9, 1, 6], [4, 7, 5]], parcourez toutes les cases et affichez la plus grande valeur.

In [ ]:
# A COMPLETER (intermédiaire 2)
grille = [[3, 8, 2], [9, 1, 6], [4, 7, 5]]

IntermĂ©diaire 3. À partir de releves = [[20.1, 101.3], [21.5, 101.1], [19.8, 101.4]], calculez la somme de chaque colonne (tempĂ©rature totale, pression totale).

In [ ]:
# A COMPLETER (intermédiaire 3)
releves = [[20.1, 101.3], [21.5, 101.1], [19.8, 101.4]]

Intermédiaire 4. Avec numpy, créez la grille [[20.1, 101.3], [21.5, 101.1], [19.8, 101.4]], extrayez la colonne des pressions et affichez sa moyenne.

In [ ]:
# A COMPLETER (intermédiaire 4)
import numpy as np

Intermédiaire 5 (normalisation). Avec numpy, normalisez le tableau [12, 18, 9, 21, 15] pour ramener toutes les valeurs entre 0 et 1 (normalisation min-max : (x - min) / (max - min)). La plus petite valeur doit donner 0, la plus grande 1.

In [ ]:
# A COMPLETER (intermédiaire 5)
import numpy as np
đŸȘœ EXERCICES PLUS DIFFICILES (avancĂ©s, facultatifs)
Des **structures imbriquées** : des hashmaps rangés dans un tableau, et un hashmap dans un hashmap.

AvancĂ© 1. Un dictionnaire (tableau associatif) peut avoir des listes comme valeurs. À partir de donnees = [('acide', 2.1), ('base', 12.4), ('acide', 3.0), ('base', 11.8)], construisez {'acide': [2.1, 3.0], 'base': [12.4, 11.8]}.

In [ ]:
# A COMPLETER (avancé 1)
donnees = [('acide', 2.1), ('base', 12.4), ('acide', 3.0), ('base', 11.8)]

Avancé 2 (main de cartes). Une carte à jouer se représente par un dictionnaire {'valeur': ..., 'couleur': ...}. Construisez une main (un tableau de hashmaps) d'au moins trois cartes, puis affichez chaque carte sous la forme valeur de couleur.

In [ ]:
# A COMPLETER (avancé 2)
main = []

Avancé 3 (menus de la semaine). Représentez les menus avec un hashmap dans un hashmap : pour chaque jour (lundi à vendredi), un dictionnaire avec entree, plat, dessert, breuvage. Affichez le menu complet du mercredi, puis le plat de chaque jour.

In [ ]:
# A COMPLETER (avancé 3)
menus = {}

AvancĂ© 4 (boucles imbriquĂ©es sur un tableau 2D). À partir de grille = [[1, 2, 3], [4, 5, 6], [7, 8, 9]], utilisez deux boucles imbriquĂ©es (une boucle dans une boucle) pour parcourir toutes les cases et afficher chaque valeur avec ses indices, par exemple [0][2] = 3.

In [ ]:
# A COMPLETER (avancé 4)
grille = [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

Avancé 5 (triangle en console). Avec deux boucles imbriquées, affichez un triangle d'étoiles de hauteur 5 : la ligne 1 contient une *, la ligne 2 en contient deux, ... la ligne 5 en contient cinq.

*
**
***
****
*****
In [ ]:
# A COMPLETER (avancé 5)
hauteur = 5

AvancĂ© 6 (sapin de la forĂȘt đŸŒČ). Avec des boucles imbriquĂ©es, affichez un sapin centrĂ© de hauteur 4 : chaque ligne a d'abord des espaces, puis un nombre impair d'Ă©toiles (1, 3, 5, 7), et terminez par un petit tronc | centrĂ©.

   *
  ***
 *****
*******
   |
In [ ]:
# A COMPLETER (avancé 6)
hauteur = 4

SOLUTIONS (document de la prof)¶

Cette section contient les corrigés. Pour produire la version étudiante, supprimez toutes les cellules à partir d'ici.

🚀 Solutions - intermĂ©diaires¶

đŸȘœ Solutions - avancĂ©s¶


Lien avec le projet de la semaine¶

Les donnĂ©es lues dans un fichier (sĂ©ance 2.4) arrivent souvent sous forme de tableau 2D, et chaque enregistrement peut ĂȘtre rangĂ© dans un dictionnaire. Ce sont les structures du Projet 2.

Pour aller plus loin (facultatif)¶

  • Cherchez .keys() et .values() sur un dictionnaire.
  • Un dictionnaire peut contenir des listes (ou d'autres dictionnaires) comme valeurs.