ajout partie sur p-uplets nommés, typo

This commit is contained in:
2026-01-05 23:53:42 +01:00
parent f976e305b4
commit b9be582014
4 changed files with 91 additions and 75 deletions

View File

@@ -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 |
------------

View File

@@ -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",
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
" <caption style=\"caption-side:bottom;\">Fig.3.1 - Effet miroir vertical de la Fig.4</caption>\n",
"<tr><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9898;</td></tr>\n",
"<tr><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td></tr>\n",
"<tr><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td></tr>\n",
"<tr><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td></tr>\n",
"<tr><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td></tr>\n",
"<tr><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td></tr>\n",
"</table>"
]
"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<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n <caption style=\"caption-side:bottom;\">Fig.3.1 - Effet miroir vertical de la Fig.3</caption>\n<tr><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9898;</td></tr>\n<tr><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td></tr>\n<tr><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td></tr>\n<tr><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td></tr>\n<tr><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td></tr>\n<tr><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td></tr>\n</table>"
},
{
"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",
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
" <caption style=\"caption-side:bottom;\">Fig.3.2 - Effet miroir horizontal de la Fig.4</caption>\n",
"<tr><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td></tr>\n",
"<tr><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td></tr>\n",
"<tr><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td></tr>\n",
"<tr><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td></tr>\n",
"<tr><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td></tr>\n",
"<tr><td>&#9898;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td></tr>\n",
"</table>"
]
"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<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n <caption style=\"caption-side:bottom;\">Fig.3.2 - Effet miroir horizontal de la Fig.3</caption>\n<tr><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td></tr>\n<tr><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td></tr>\n<tr><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td></tr>\n<tr><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td></tr>\n<tr><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td></tr>\n<tr><td>&#9898;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td></tr>\n</table>"
},
{
"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",
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
" <caption style=\"caption-side:bottom;\">Fig.3.3 - Roration horaire de la Fig.4</caption>\n",
"<tr><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9898;</td></tr>\n",
"<tr><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td></tr>\n",
"<tr><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td></tr>\n",
"<tr><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td></tr>\n",
"<tr><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td></tr>\n",
"<tr><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td></tr>\n",
"</table>"
]
"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<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n <caption style=\"caption-side:bottom;\">Fig.3.3 - Rotation horaire de la Fig.3</caption>\n<tr><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9898;</td></tr>\n<tr><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td></tr>\n<tr><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td></tr>\n<tr><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td></tr>\n<tr><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td></tr>\n<tr><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td></tr>\n</table>"
},
{
"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",
"<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n",
" <caption style=\"caption-side:bottom;\">Fig.3.4 - Roration anti-horaire de la Fig.4</caption>\n",
"<tr><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td></tr>\n",
"<tr><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td></tr>\n",
"<tr><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td></tr>\n",
"<tr><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td></tr>\n",
"<tr><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td></tr>\n",
"<tr><td>&#9898;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td></tr>\n",
"</table>"
]
"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<table style=\"margin : 0 auto 0 auto; width : 100px;text-align:center;\">\n <caption style=\"caption-side:bottom;\">Fig.3.4 - Rotation anti-horaire de la Fig.3</caption>\n<tr><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td></tr>\n<tr><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td></tr>\n<tr><td>&#9899;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td></tr>\n<tr><td>&#9898;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td></tr>\n<tr><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9899;</td><td>&#9898;</td><td>&#9899;</td></tr>\n<tr><td>&#9898;</td><td>&#9898;</td><td>&#9898;</td><td>&#9899;</td><td>&#9899;</td><td>&#9899;</td></tr>\n</table>"
},
{
"cell_type": "code",
@@ -569,4 +511,4 @@
},
"nbformat": 4,
"nbformat_minor": 2
}
}

View File

@@ -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 |
----------

View File

@@ -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]