Numérique et sciences informatiques (spécialité) · Première
P-uplets et p-uplets nommés : exercices corrigés de NSI en Première
Publié le 6 novembre 2026 · Mis à jour le 6 novembre 2026 · Signaler une erreur
L'essentiel
- Un p-uplet (tuple) est une suite ordonnée d'éléments de types quelconques ; on le crée en séparant les valeurs par des virgules, le plus souvent entre parenthèses 24.
- Selon sa taille, on parle de couple (2), de triplet (3) ou de quadruplet (4) 4.
- Un p-uplet nommé donne accès aux composantes par un descripteur et non par un indice 1.
- En Python, on les représente avec un dictionnaire ou avec
collections.namedtuple1. - Une table de données devient un tableau de p-uplets nommés : un dictionnaire par ligne, les clés étant les noms de colonnes 31.
Comment utiliser ces exercices
Ces exercices s'adressent à toi si tu veux vérifier que tu manies bien les p-uplets et les p-uplets nommés en Python. Ils sont classés par difficulté croissante. Les premiers vérifient le vocabulaire et la lecture d'un p-uplet. Les suivants te font calculer avec des composantes, puis manipuler des données organisées comme dans une vraie table. Les derniers demandent de choisir une représentation et de la justifier.
Pour t'entraîner vraiment, ne regarde pas la correction trop vite. Cherche d'abord seul, avec ton éditeur Python ouvert si tu peux, puis utilise les indices un par un, et seulement ensuite le corrigé pas à pas.
Les exercices
Exercice 1 Lire un p-uplet
On définit en Python :
t = (3, 8, "car", 2.4)
- Combien de composantes possède
t? - Comment appelle-t-on un p-uplet de cette taille ?
- Les composantes de
tont-elles toutes le même type ?
Donne comme réponse numérique le nombre de composantes.
Indice 1
Compte les valeurs séparées par des virgules, sans oublier celle qui est entre guillemets.
Indice 2
Le nom d'un p-uplet dépend de sa taille : couple, triplet, quadruplet…
Voir la correction pas à pas
On repère les valeurs séparées par des virgules :
3,8,"car"et2.4. Il y en a quatre.Un p-uplet à quatre éléments s'appelle un quadruplet 4.
Les types diffèrent : deux entiers, une chaîne de caractères et un flottant. Un p-uplet accepte des éléments de types différents 2, donc il n'y a aucune contradiction.
On peut le vérifier dans l'interpréteur avec
type(t), qui renvoietuple4.
Retiens la démarche : on compte les composantes, on nomme le p-uplet d'après sa taille et on ne se laisse pas troubler par des types mélangés.
Exercice 2 Des parenthèses qui comptent
Voici deux définitions :
u = (1, 2)
w = ((1, 2), 3)
- Quelle est la taille de
u? Comment appelle-t-on un tel p-uplet ? - Quelle est la taille de
w? Que contient sa première composante ? - Pourquoi ne peut-on pas écrire
w = 1, 2, 3pour obtenir la même chose ?
Donne comme réponse numérique la taille de w.
Indice 1
La première composante de w est elle-même un p-uplet, mais elle ne compte que pour une composante.
Indice 2
Comparer w et 1, 2, 3 : combien de composantes dans chaque cas ?
Voir la correction pas à pas
ucontient deux éléments : c'est un couple 4.wcontient deux composantes : le p-uplet(1, 2)et l'entier3. Sa taille est donc 2, pas 3.Écrire
1, 2, 3fabriquerait un triplet de trois entiers, ce qui n'est pas du tout la même chose.Pour qu'un p-uplet en contienne un autre, les parenthèses sont nécessaires 2.
Un p-uplet imbriqué compte pour une seule composante dans le p-uplet qui le contient. Les parenthèses internes marquent cette imbrication.
Exercice 3 Calculer avec les indices
On reprend t = (3, 8, "car", 2.4). Les éléments d'un p-uplet se repèrent par leur indice 2. Ici, t[0] vaut 3, t[1] vaut 8, t[2] vaut "car" et t[3] vaut 2.4.
- Quelle expression permet d'obtenir le produit de la deuxième composante par la quatrième ?
- Calcule
t[0] + t[1] * t[3]. - Pourquoi
t[0] + t[2]ne peut-il pas donner un nombre ?
Donne comme réponse numérique la valeur de t[0] + t[1] * t[3].
Indice 1
Remplace chaque accès par sa valeur avant de calculer.
Indice 2
Respecte la priorité de la multiplication sur l'addition.
Voir la correction pas à pas
On remplace :
t[0] + t[1] * t[3]devient3 + 8 * 2.4.On effectue d'abord la multiplication : .
On additionne : .
Pour la question 3,
t[2]vaut"car", qui est une chaîne de caractères et non un nombre : on ne peut donc pas obtenir un résultat numérique en l'additionnant à3.
Accéder à une composante par son indice revient à la remplacer par sa valeur. Le piège est de ne pas regarder le type de la composante visée.
Exercice 4 L'ordre et la taille comptent
Pour chaque affirmation, dis si elle est vraie ou fausse et justifie :
(1, 2)et(2, 1)représentent le même p-uplet.(1, 2)et(1, 2, 3)peuvent être égaux.(1, 2)et(1, 2)représentent le même p-uplet.
Indice 1
Un p-uplet est une suite ordonnée.
Indice 2
Pense au nombre de composantes de chaque côté.
Voir la correction pas à pas
Affirmation 1 : fausse. Un p-uplet est une suite ordonnée 2 ; avec les mêmes valeurs dans un autre ordre, on obtient un autre p-uplet.
Affirmation 2 : fausse. Un n-uplet ne peut être égal à un p-uplet que si n et p sont égaux 5 ; ici les tailles sont 2 et 3.
Affirmation 3 : vraie. Même taille, mêmes valeurs dans le même ordre.
Pour comparer deux p-uplets, on regarde d'abord leur taille, puis les composantes une à une, dans l'ordre.
Exercice 5 Distance entre deux points
En géométrie, les coordonnées d'un point sont des n-uplets 5. En Python, on peut donc représenter un point du plan par un couple. On écrit des fonctions qui prennent des p-uplets en paramètres et, pour une racine carrée, on importe d'abord sqrt 2.
from math import sqrt
def distance(a, b):
return sqrt((b[0] - a[0])**2 + (b[1] - a[1])**2)
A = (1, 2)
B = (4, 6)
- Que valent
A[0],A[1],B[0]etB[1]? - Calcule
distance(A, B)à la main. - Cette fonction marcherait-elle avec deux points de l'espace donnés par des triplets ? Explique.
Donne comme réponse numérique distance(A, B).
Indice 1
Remplace a par A et b par B dans la formule.
Indice 2
Les carrés sont ceux des différences de coordonnées : et .
Voir la correction pas à pas
On lit :
A[0]vaut 1,A[1]vaut 2,B[0]vaut 4 etB[1]vaut 6.On calcule les différences : et .
On élève au carré : et , donc .
On prend la racine carrée : .
Pour la question 3 : la fonction n'utilise que les indices 0 et 1. Avec des triplets, elle ignorerait la troisième coordonnée et donnerait une distance fausse ; il faudrait ajouter un terme pour l'indice 2.
Un p-uplet est un moyen simple de transmettre à une fonction plusieurs valeurs liées, comme les deux coordonnées d'un point. On y accède par indice, ce qui oblige à se souvenir de la signification de chaque position.
Exercice 6 Un élève sous forme de p-uplet nommé
Le type des p-uplets nommés n'existe pas nativement en Python ; on peut utiliser collections.namedtuple, ou bien un dictionnaire 1. Ici, on choisit le dictionnaire : chaque clé joue le rôle de descripteur, qui permet d'atteindre une composante sans indice 1.
eleves = [
{"nom": "Lina", "age": 16, "note": 12},
{"nom": "Hugo", "age": 17, "note": 15},
{"nom": "Sara", "age": 16, "note": 9},
]
- Que renvoie
eleves[1]["nom"]? - Écris une boucle qui calcule la moyenne des notes.
- Quelle est cette moyenne ?
Donne comme réponse numérique la moyenne des notes.
Indice 1
eleves[1] désigne le deuxième dictionnaire de la liste ; on y lit ensuite la clé "nom".
Indice 2
Additionne d'abord toutes les notes dans une variable, puis divise par le nombre d'élèves.
Voir la correction pas à pas
eleves[1]est le dictionnaire de Hugo ;eleves[1]["nom"]renvoie donc"Hugo".On écrit la boucle :
total = 0 for e in eleves: total = total + e["note"] moyenne = total / len(eleves)- Les notes valent 12, 15 et 9, donc
totalvaut 36.
- Les notes valent 12, 15 et 9, donc
On divise par 3 : .
Avec un descripteur, e["note"] se lit tout seul, alors que e[2] obligerait à se rappeler que la note occupe la troisième position. C'est tout l'intérêt des p-uplets nommés.
Exercice 7 Transformer une table en tableau de p-uplets nommés
Un fichier de données, avec des valeurs séparées par des virgules, a pour première ligne le nom des colonnes ; on veut en tirer un tableau de p-uplets nommés représentant la table 1. Voici trois lignes de données :
nom,age,ville
Amel,16,Lyon
Bruno,17,Nantes
Clara,15,Lille
- Combien de colonnes la table comporte-t-elle ? Quels sont les descripteurs ?
- Écris le tableau obtenu, sous forme de liste de dictionnaires.
- Calcule l'âge moyen des élèves de la table.
Donne comme réponse numérique l'âge moyen.
Indice 1
La première ligne donne les descripteurs : ce sont les clés de chaque dictionnaire.
Indice 2
Chaque ligne suivante devient un dictionnaire ; les âges sont à convertir en entiers pour pouvoir calculer.
Voir la correction pas à pas
La première ligne contient trois noms :
nom,ageetville. Il y a trois colonnes, et ce sont les descripteurs.Chaque ligne de données devient un dictionnaire dont les clés sont ces descripteurs, ce qui donne un tableau de p-uplets nommés représentés par des dictionnaires 3 :
table = [ {"nom": "Amel", "age": 16, "ville": "Lyon"}, {"nom": "Bruno", "age": 17, "ville": "Nantes"}, {"nom": "Clara", "age": 15, "ville": "Lille"}, ]On additionne les âges : .
On divise par le nombre de lignes : .
Une table se lit comme un tableau de p-uplets nommés : les colonnes fournissent les descripteurs et chaque ligne fournit un dictionnaire. Attention : lues dans un fichier, les valeurs arrivent comme des chaînes ; il faut convertir les âges avant de calculer.
Exercice 8 Périmètre d'un triangle avec des points nommés
On représente chaque point du plan par un dictionnaire, avec les descripteurs "x" et "y" :
from math import sqrt
A = {"x": 0, "y": 0}
B = {"x": 4, "y": 0}
C = {"x": 0, "y": 3}
def dist(p, q):
return sqrt((q["x"] - p["x"])**2 + (q["y"] - p["y"])**2)
- Calcule
dist(A, B),dist(A, C)etdist(B, C). - En déduire le périmètre du triangle ABC.
- Compare cette écriture avec celle qui utilise des couples
(x, y). Que gagne-t-on, et que perd-on ?
Donne comme réponse numérique le périmètre.
Indice 1
Pour dist(B, C), les différences sont et ; le signe disparaît une fois les différences élevées au carré.
Indice 2
Le périmètre est la somme des trois longueurs.
Voir la correction pas à pas
dist(A, B): les différences valent 4 et 0, donc .dist(A, C): les différences valent 0 et 3, donc .dist(B, C): les différences valent et , donc .Le périmètre vaut .
Comparaison : avec des couples, on écrit
p[0]etp[1], ce qui est plus court mais oblige à retenir quelle coordonnée occupe quelle position. Avec des descripteurs,p["x"]se lit sans ambiguïté, ce qui rend le code plus clair 1. On perd en brièveté. On gagne aussi une propriété liée au dictionnaire : il est mutable, alors que les p-uplets nommés sont normalement immutables 1.
Représenter un point par un dictionnaire coûte quelques caractères de plus, mais rend la fonction lisible. Pense toutefois que le caractère mutable du dictionnaire n'est qu'un effet de la représentation choisie, pas de la notion de p-uplet nommé 1.
Exercice 9 Choisir la bonne représentation
Pour chacune des trois situations, choisis la représentation la plus adaptée parmi : un p-uplet simple, un p-uplet nommé (par exemple un dictionnaire), et justifie en deux ou trois phrases.
- Une fonction doit renvoyer à la fois le quotient et le reste d'une division.
- On stocke une fiche de livre avec un titre, un auteur, une année et un nombre de pages.
- On lit un fichier de données dont la première ligne donne le nom des colonnes et on veut traiter chaque ligne.
Indice 1
Demande-toi si le sens de chaque valeur est évident à partir de sa position seule.
Indice 2
Pense à ce que fournit la première ligne d'un fichier de données.
Voir la correction pas à pas
Situation 1 : un p-uplet simple (un couple) convient. Il n'y a que deux valeurs, leur ordre est connu et immédiat, et on les récupère en général aussitôt. Un p-uplet est une suite ordonnée d'éléments 2, ce qui suffit ici.
Situation 2 : un p-uplet nommé est préférable. Quatre composantes de natures différentes se retrouveraient mal par indice ; un descripteur comme
"titre"ou"annee"évite de confondre l'année et le nombre de pages.Situation 3 : un p-uplet nommé, sans hésitation. La première ligne fournit les descripteurs, et chaque ligne devient un dictionnaire dont les clés sont ces noms de colonnes 13. C'est précisément le cas d'usage pour lequel ces p-uplets ont été introduits au programme 1.
Règle pratique : peu de valeurs dont l'ordre est évident, un p-uplet simple ; plusieurs valeurs de natures différentes ou issues d'une table, un p-uplet nommé avec des descripteurs explicites.
Les questions qu'on se pose
Quelle est la différence entre un p-uplet et un p-uplet nommé ?
Dans un p-uplet, on repère chaque composante par sa position, c'est-à-dire son indice 2. Dans un p-uplet nommé, on passe par un descripteur, un nom, au lieu d'un indice 1. Le contenu est de même nature ; seule la façon d'atteindre une composante change, avec un gain de lisibilité quand il y a beaucoup de valeurs.
Python possède-t-il un type « p-uplet nommé » ?
Pas nativement : ce type n'existe pas tel quel en Python 1. On a deux solutions. On peut utiliser collections.namedtuple, ou bien un dictionnaire, dont les clés servent de descripteurs 1. En NSI, on utilise surtout le dictionnaire. Attention à une différence : les p-uplets nommés sont normalement immutables, alors que les dictionnaires sont mutables 1.
Faut-il toujours mettre des parenthèses pour écrire un p-uplet ?
Sources
- P-uplets nommés et dictionnaires — Ressources Éduscol, Éduscol (Ministère de l'Éducation nationale). Consulté le 6 novembre 2026.
- Types construits en Python — Ressources Éduscol, Éduscol (Ministère de l'Éducation nationale). Consulté le 6 novembre 2026.
- Manipulation de tables — Représentation des données — Ressources Éduscol, Éduscol (Ministère de l'Éducation nationale). Consulté le 6 novembre 2026.
- Introduction aux tuples — Spécialité NSI, Académie de Lyon. Consulté le 6 novembre 2026.
- Uplet, Wikipédia. Consulté le 6 novembre 2026.
Les numéros dans le texte renvoient à ces sources. Une source qui ne dit pas ce qu'on lui fait dire ? Signale-le.