From 101dc4206e87daa7218a50ff073c73fc42858ed9 Mon Sep 17 00:00:00 2001 From: Florian Mathieu Date: Mon, 5 Jan 2026 23:53:42 +0100 Subject: [PATCH] =?UTF-8?q?ajout=20partie=20sur=20p-uplets=20nomm=C3=A9s,?= =?UTF-8?q?=20typo?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../chapitre_1/README.md | 82 ++++++++++++++++++- .../chapitre_1/td/TD.ipynb | 70 ++-------------- .../chapitre_2/README.md | 10 +-- .../chapitre_3/README.md | 4 +- 4 files changed, 91 insertions(+), 75 deletions(-) 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", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
Fig.3.1 - Effet miroir vertical de la Fig.4
" - ] + "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 \n\n\n\n\n\n\n
Fig.3.1 - Effet miroir vertical de la Fig.3
" }, { "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", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
Fig.3.2 - Effet miroir horizontal de la Fig.4
" - ] + "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 \n\n\n\n\n\n\n
Fig.3.2 - Effet miroir horizontal de la Fig.3
" }, { "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", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
Fig.3.3 - Roration horaire de la Fig.4
" - ] + "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 \n\n\n\n\n\n\n
Fig.3.3 - Rotation horaire de la Fig.3
" }, { "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", - " \n", - "\n", - "\n", - "\n", - "\n", - "\n", - "\n", - "
Fig.3.4 - Roration anti-horaire de la Fig.4
" - ] + "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 \n\n\n\n\n\n\n
Fig.3.4 - Rotation anti-horaire de la Fig.3
" }, { "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]