diff --git a/representation_construits/chapitre_1/README.md b/representation_construits/chapitre_1/README.md
index 311ad46..7d3d674 100644
--- a/representation_construits/chapitre_1/README.md
+++ b/representation_construits/chapitre_1/README.md
@@ -2,8 +2,8 @@
-------------
-> ***Contenu*** : Notions introduites : le type conteneur, avec les listes, les tuples, parcours de séquences.
-> ***Compétences*** : Comprendre la différence entre une liste python et un tuple. Maîtriser la création de conteneurs sur Python.
+> ***Contenu*** : Notions introduites : le type conteneur, avec les listes, les tuples, les p-uplets nommés, parcours de séquences.
+> ***Compétences*** : Comprendre la différence entre une liste python et un tuple. Maîtriser la création de conteneurs sur Python. Savoir utiliser les p-uplets nommés.
## Le programme
@@ -19,7 +19,7 @@
Les types *conteneurs* comme les tuples ou les listes permettent de stocker des objets, et proposent des méthodes d'accès, de modification et d'itération sur ces mêmes objets.
-Ici nous allons voir deux types de conteneurs en particulier : les tuples, les listes. En apprenant à créer et à manipuler ces types d'objets, cela nous permettra de travailler sur un grand nombre de données de manière rapide et efficace.
+Ici nous allons voir plusieurs types de conteneurs : les listes, les tuples et les p-uplets nommés. En apprenant à créer et à manipuler ces types d'objets, cela nous permettra de travailler sur un grand nombre de données de manière rapide et efficace.
--------
@@ -294,7 +294,81 @@ print(t)
- Le tuple lui-même reste le même (il contient toujours trois éléments et les deux premiers sont toujours 1 et 2), mais la liste à l'intérieur du tuple a été modifiée.
-- C'est pourquoi on dit que les tuples peuvent "contenir" des éléments mutables.
+- C'est pourquoi on dit que les tuples peuvent "contenir" des éléments mutables.
+
+------------
+
+## Les p-uplets nommés (namedtuple)
+
+Lorsqu'on utilise un tuple classique, on accède aux éléments par leur indice. Cela peut rendre le code difficile à lire, surtout quand le tuple contient plusieurs valeurs.
+
+```python
+# Tuple classique représentant un élève
+eleve = ("Alice", 16, "1ère NSI")
+print(eleve[0]) # Le prénom
+print(eleve[1]) # L'âge
+```
+
+Les **p-uplets nommés** (ou *named tuples*) permettent d'accéder aux éléments par leur nom, tout en conservant les avantages des tuples (immutabilité, performance).
+
+### Création d'un p-uplet nommé
+
+Pour utiliser les p-uplets nommés, on importe `namedtuple` depuis le module `collections` :
+
+```python
+from collections import namedtuple
+
+# On définit un nouveau type "Eleve" avec trois champs
+Eleve = namedtuple('Eleve', ['prenom', 'age', 'classe'])
+
+# On crée une instance de ce type
+alice = Eleve("Alice", 16, "1ère NSI")
+bob = Eleve(prenom="Bob", age=17, classe="Terminale NSI")
+```
+
+### Accès aux éléments
+
+On peut maintenant accéder aux éléments par leur nom :
+
+```python
+print(alice.prenom) # Alice
+print(alice.age) # 16
+print(bob.classe) # Terminale NSI
+```
+
+L'accès par indice reste possible :
+
+```python
+print(alice[0]) # Alice (équivalent à alice.prenom)
+```
+
+### Exemple : coordonnées géographiques
+
+```python
+from collections import namedtuple
+
+Coordonnees = namedtuple('Coordonnees', ['latitude', 'longitude'])
+
+paris = Coordonnees(48.8566, 2.3522)
+lyon = Coordonnees(latitude=45.7640, longitude=4.8357)
+
+print(f"Paris : {paris.latitude}°N, {paris.longitude}°E")
+```
+
+### Avantages des p-uplets nommés
+
+- **Lisibilité** : `point.x` est plus clair que `point[0]`
+- **Auto-documentation** : le code s'explique de lui-même
+- **Immutabilité** : comme les tuples classiques, ils ne peuvent pas être modifiés
+- **Compatibilité** : ils fonctionnent partout où un tuple est attendu
+
+### À retenir
+
+| Opération | Résultat |
+| --------- | -------- |
+| `p.champ` | Renvoie la valeur du champ nommé |
+| `p[i]` | Renvoie l'élément d'indice i (comme un tuple classique) |
+| `p._fields` | Renvoie un tuple contenant les noms des champs |
------------
diff --git a/representation_construits/chapitre_1/td/TD.ipynb b/representation_construits/chapitre_1/td/TD.ipynb
index 6baa032..939f634 100644
--- a/representation_construits/chapitre_1/td/TD.ipynb
+++ b/representation_construits/chapitre_1/td/TD.ipynb
@@ -65,17 +65,7 @@
{
"cell_type": "markdown",
"metadata": {},
- "source": [
- "### Exercice 1 : Création de listes\n",
- "\n",
- "1. Créer une liste contenant l'ensemble des noms des personnes dans la salle de TP\n",
- "2. Créer une liste contenant l'ensemble des entiers pairs entre 0 et 20 inclus,\n",
- "3. Afficher uniquement les entiers de la liste, construit à la question 2, qui sont multiples de 4.\n",
- "4. Créer une fonction `aleatoire` qui renvoieune liste de valeurs aléatoires. Elle prend 3 entiers en paramètre :\n",
- " - $n$ : le nombre d'éléments de la liste\n",
- " - $min$ : la valeur minimale possible\n",
- " - $max$ : la valeur maximale possible"
- ]
+ "source": "### Exercice 1 : Création de listes\n\n1. Créer une liste contenant l'ensemble des noms des personnes dans la salle de TP\n2. Créer une liste contenant l'ensemble des entiers pairs entre 0 et 20 inclus,\n3. Afficher uniquement les entiers de la liste, construit à la question 2, qui sont multiples de 4.\n4. Créer une fonction `aleatoire` qui renvoie une liste de valeurs aléatoires. Elle prend 3 entiers en paramètre :\n - $n$ : le nombre d'éléments de la liste\n - $min$ : la valeur minimale possible\n - $max$ : la valeur maximale possible"
},
{
"cell_type": "code",
@@ -413,19 +403,7 @@
{
"cell_type": "markdown",
"metadata": {},
- "source": [
- "1. Écrire une méthode `miroir_vertical` qui prend en paramètre une matrice et a pour effet de bord de réaliser l'effet miroir vertical sur les valeurs de la matrice.\n",
- "\n",
- "
\n",
- " Fig.3.1 - Effet miroir vertical de la Fig.4\n",
- "| ⚪ | ⚪ | ⚫ | ⚪ | ⚪ | ⚪ |
\n",
- "| ⚪ | ⚫ | ⚪ | ⚫ | ⚪ | ⚪ |
\n",
- "| ⚫ | ⚪ | ⚪ | ⚪ | ⚫ | ⚪ |
\n",
- "| ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ |
\n",
- "| ⚫ | ⚪ | ⚪ | ⚫ | ⚪ | ⚫ |
\n",
- "| ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ |
\n",
- "
"
- ]
+ "source": "1. Écrire une fonction `miroir_vertical` qui prend en paramètre une matrice et a pour effet de bord de réaliser l'effet miroir vertical sur les valeurs de la matrice.\n\n\n Fig.3.1 - Effet miroir vertical de la Fig.3\n| ⚪ | ⚪ | ⚫ | ⚪ | ⚪ | ⚪ |
\n| ⚪ | ⚫ | ⚪ | ⚫ | ⚪ | ⚪ |
\n| ⚫ | ⚪ | ⚪ | ⚪ | ⚫ | ⚪ |
\n| ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ |
\n| ⚫ | ⚪ | ⚪ | ⚫ | ⚪ | ⚫ |
\n| ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ |
\n
"
},
{
"cell_type": "code",
@@ -439,19 +417,7 @@
{
"cell_type": "markdown",
"metadata": {},
- "source": [
- "2. Écrire une méthode `miroir_horizontal` qui prend en paramètre une matrice et a pour effet de bord de réaliser l'effet miroir horizontal sur les valeurs de la matrice.\n",
- "\n",
- "\n",
- " Fig.3.2 - Effet miroir horizontal de la Fig.4\n",
- "| ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ |
\n",
- "| ⚫ | ⚪ | ⚫ | ⚪ | ⚪ | ⚫ |
\n",
- "| ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ |
\n",
- "| ⚪ | ⚫ | ⚪ | ⚪ | ⚪ | ⚫ |
\n",
- "| ⚪ | ⚪ | ⚫ | ⚪ | ⚫ | ⚪ |
\n",
- "| ⚪ | ⚪ | ⚪ | ⚫ | ⚪ | ⚪ |
\n",
- "
"
- ]
+ "source": "2. Écrire une fonction `miroir_horizontal` qui prend en paramètre une matrice et a pour effet de bord de réaliser l'effet miroir horizontal sur les valeurs de la matrice.\n\n\n Fig.3.2 - Effet miroir horizontal de la Fig.3\n| ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ |
\n| ⚫ | ⚪ | ⚫ | ⚪ | ⚪ | ⚫ |
\n| ⚫ | ⚫ | ⚫ | ⚫ | ⚫ | ⚫ |
\n| ⚪ | ⚫ | ⚪ | ⚪ | ⚪ | ⚫ |
\n| ⚪ | ⚪ | ⚫ | ⚪ | ⚫ | ⚪ |
\n| ⚪ | ⚪ | ⚪ | ⚫ | ⚪ | ⚪ |
\n
"
},
{
"cell_type": "code",
@@ -465,19 +431,7 @@
{
"cell_type": "markdown",
"metadata": {},
- "source": [
- "3. Écrire une fonction `rotation_horaire` qui prend en paramètre une matrice et renvoie une matrice dont les valeurs correspondent à la rotation dans le sens horaire des valeurs de la matrice.\n",
- "\n",
- "\n",
- " Fig.3.3 - Roration horaire de la Fig.4\n",
- "| ⚫ | ⚫ | ⚫ | ⚪ | ⚪ | ⚪ |
\n",
- "| ⚫ | ⚪ | ⚫ | ⚫ | ⚪ | ⚪ |
\n",
- "| ⚫ | ⚫ | ⚫ | ⚪ | ⚫ | ⚪ |
\n",
- "| ⚫ | ⚪ | ⚫ | ⚪ | ⚪ | ⚫ |
\n",
- "| ⚫ | ⚪ | ⚫ | ⚪ | ⚫ | ⚪ |
\n",
- "| ⚫ | ⚫ | ⚫ | ⚫ | ⚪ | ⚪ |
\n",
- "
"
- ]
+ "source": "3. Écrire une fonction `rotation_horaire` qui prend en paramètre une matrice et renvoie une matrice dont les valeurs correspondent à la rotation dans le sens horaire des valeurs de la matrice.\n\n\n Fig.3.3 - Rotation horaire de la Fig.3\n| ⚫ | ⚫ | ⚫ | ⚪ | ⚪ | ⚪ |
\n| ⚫ | ⚪ | ⚫ | ⚫ | ⚪ | ⚪ |
\n| ⚫ | ⚫ | ⚫ | ⚪ | ⚫ | ⚪ |
\n| ⚫ | ⚪ | ⚫ | ⚪ | ⚪ | ⚫ |
\n| ⚫ | ⚪ | ⚫ | ⚪ | ⚫ | ⚪ |
\n| ⚫ | ⚫ | ⚫ | ⚫ | ⚪ | ⚪ |
\n
"
},
{
"cell_type": "code",
@@ -491,19 +445,7 @@
{
"cell_type": "markdown",
"metadata": {},
- "source": [
- "4. Écrire une fonction `rotation_anti_horaire` qui prend en paramètre une matrice et renvoie une matrice dont les valeurs correspondent à la rotation dans le sens anti-horaire des valeurs de la matrice.\n",
- "\n",
- "\n",
- " Fig.3.4 - Roration anti-horaire de la Fig.4\n",
- "| ⚪ | ⚪ | ⚫ | ⚫ | ⚫ | ⚫ |
\n",
- "| ⚪ | ⚫ | ⚪ | ⚫ | ⚪ | ⚫ |
\n",
- "| ⚫ | ⚪ | ⚪ | ⚫ | ⚪ | ⚫ |
\n",
- "| ⚪ | ⚫ | ⚪ | ⚫ | ⚫ | ⚫ |
\n",
- "| ⚪ | ⚪ | ⚫ | ⚫ | ⚪ | ⚫ |
\n",
- "| ⚪ | ⚪ | ⚪ | ⚫ | ⚫ | ⚫ |
\n",
- "
"
- ]
+ "source": "4. Écrire une fonction `rotation_anti_horaire` qui prend en paramètre une matrice et renvoie une matrice dont les valeurs correspondent à la rotation dans le sens anti-horaire des valeurs de la matrice.\n\n\n Fig.3.4 - Rotation anti-horaire de la Fig.3\n| ⚪ | ⚪ | ⚫ | ⚫ | ⚫ | ⚫ |
\n| ⚪ | ⚫ | ⚪ | ⚫ | ⚪ | ⚫ |
\n| ⚫ | ⚪ | ⚪ | ⚫ | ⚪ | ⚫ |
\n| ⚪ | ⚫ | ⚪ | ⚫ | ⚫ | ⚫ |
\n| ⚪ | ⚪ | ⚫ | ⚫ | ⚪ | ⚫ |
\n| ⚪ | ⚪ | ⚪ | ⚫ | ⚫ | ⚫ |
\n
"
},
{
"cell_type": "code",
@@ -569,4 +511,4 @@
},
"nbformat": 4,
"nbformat_minor": 2
-}
+}
\ No newline at end of file
diff --git a/representation_construits/chapitre_2/README.md b/representation_construits/chapitre_2/README.md
index 06ed643..1f0ca31 100644
--- a/representation_construits/chapitre_2/README.md
+++ b/representation_construits/chapitre_2/README.md
@@ -2,8 +2,8 @@
-------------
-> ***Contenue*** : Notions introduites : le type dictionnaire
-> ***Compétences*** : Construire une entrée de dictionnaire, savoir itérer sur es élèments d'un dictionnaire, connaître les méthodes.
+> ***Contenu*** : Notions introduites : le type dictionnaire
+> ***Compétences*** : Construire une entrée de dictionnaire, savoir itérer sur les éléments d'un dictionnaire, connaître les méthodes.
## Le programme
@@ -23,7 +23,7 @@ Les dictionnaires sont des conteneurs, comme les listes et tuples, vus précéde
Par contre, contrairement aux types de conteneurs précédémment étudiés, on ne peut pas accéder au contenu d'un dictionnaire à l'aide d'un indice : un dictionnaire n'est pas une séquence.
-Si on peut bien modifier les valeurs dans un dictionnaire, chaque clé est *unique et non mutable*. Elle peut être une chaîne de caractères, un nombre, un tulle de nombre...
+Si on peut bien modifier les valeurs dans un dictionnaire, chaque clé est *unique et non mutable*. Elle peut être une chaîne de caractères, un nombre, un tuple de nombres...
Enfin, les valeurs, quant à elles, peuvent être quelconques.
@@ -41,7 +41,7 @@ dico = dict()
Pour initialiser un dictionnaire avec des valeurs :
-```pytho
+```python
perso = {"prenom" : "Bilbo", "age" : 111}
```
@@ -128,7 +128,7 @@ Par défaut, on itère sur les clés.
| x in dico.keys() | renvoie True si une clé de dico est égale à x, False sinon |
| dico[k] = v | Modifie la valeur v associée à la clé k ou l'ajoute si elle n'existe pas |
| dico.get(k, v) | Renvoie la valeur associé à la clé k. Si la clé k n'existe pas, renvoie la valeur v |
-| del dico(k) | Enlève du dictionnaire la clé k |
+| del dico[k] | Enlève du dictionnaire la clé k |
----------
diff --git a/representation_construits/chapitre_3/README.md b/representation_construits/chapitre_3/README.md
index e65e606..8b370e2 100644
--- a/representation_construits/chapitre_3/README.md
+++ b/representation_construits/chapitre_3/README.md
@@ -1,6 +1,6 @@
## Structures imbriquées et compréhensions
-> Il est possible de combiner listes, tuples, et dictionnaires. Avec la syntaxe des compréhensions, l'écriture des listes et dictionnaires semble plus élègante.
+> Il est possible de combiner listes, tuples, et dictionnaires. Avec la syntaxe des compréhensions, l'écriture des listes et dictionnaires semble plus élégante.
--------
@@ -20,7 +20,7 @@ Ici, on crée une liste de trois tuples.
Que peuvent représenter ces trois tuples ?
-On peut vérifier qu'il s'agut bien d'un tuple :
+On peut vérifier qu'il s'agit bien d'un tuple :
```python
t = lst[1]