Première · Tableaux, textes et dictionnaires

Tuples et valeurs regroupées

Une position demande deux coordonnées ; un relevé associe une date et une mesure ; une division fournit un quotient et un reste. Les tuples regroupent ces informations pour les transmettre ensemble sans perdre le lien entre leurs composantes.

SofienAvec SofienIngénieur et enseignant en informatique
Dans ce chapitre

Un cap pour ce chapitre

Ce que vous saurez faire

  • Lire et construire un tuple de valeurs
  • Écrire une fonction renvoyant plusieurs résultats regroupés
  • Choisir entre positions et champs nommés
Les bases utiles pour commencer

Regrouper sans confondre les composantes

Un tuple, ou p-uplet, est une collection ordonnée de valeurs. Le couple (4, 7) possède une première composante 4 et une seconde 7. En Python, l’accès commence à l’indice zéro : position[0] donne la première coordonnée, position[1] la seconde. L’ordre fait donc partie de la signification. Le couple (longitude, latitude) n’est pas interchangeable avec (latitude, longitude) si le reste du programme attend une convention précise. Un nom de variable et une documentation courts doivent préciser ce que chaque position représente.

L’indice décrit la place d’une composante, tandis que son rôle dépend du contrat. Si un capteur renvoie température puis humidité, les nombres peuvent tous deux être positifs et plausibles même lorsqu’on les inverse. Les noms au moment de la décomposition rendent cette convention visible.

Construire une valeur composée

Les tuples Python peuvent regrouper des valeurs de types différents, comme ("Lina", 16, True). Ils sont utiles pour des informations qui voyagent ensemble. Un tuple n’est pas modifiable par affectation d’une composante : position[0] = 9 est interdit. On peut en revanche construire un nouveau tuple et l’associer au même nom. Cette propriété ne signifie pas qu’une variable ne peut plus changer de valeur. Il faut distinguer le conteneur immuable et le nom qui peut être réaffecté. Le tuple à une seule composante s’écrit avec une virgule, comme (5,).

Les parenthèses ne suffisent pas à créer un tuple d’un seul élément : (5) reste l’entier cinq. La virgule de (5,) annonce un regroupement à une composante. Le tuple vide s’écrit (). Sa longueur nulle interdit tout accès indexé.

Renvoyer un résultat composé

Une fonction Python renvoie un objet avec return. Pour fournir plusieurs informations, elle peut renvoyer un tuple. Une fonction division(n, d) peut ainsi renvoyer (n // d, n % d), avec d strictement positif dans notre exemple. L’appelant peut conserver le tuple entier ou répartir ses composantes dans deux noms avec quotient, reste = division(17, 5). Cette décomposition exige le même nombre de noms que de composantes. Le contrat doit préciser l’ordre : confondre quotient et reste donnerait des nombres valides mais un raisonnement incorrect.

def division(n, d):
    assert n >= 0 and d > 0
    return (n // d, n % d)

quotient, reste = division(17, 5)

La décomposition se fait après le calcul complet du membre droit. Elle permet aussi un échange comme a, b = b, a : les deux anciennes valeurs sont lues avant leurs nouvelles associations. Ce mécanisme diffère de deux affectations successives où la seconde relit une valeur déjà remplacée.

Quand les champs nommés deviennent plus clairs

Pour un couple de coordonnées, les positions sont souvent faciles à retenir. Pour un enregistrement contenant un nom, une date, une classe et plusieurs mesures, des champs nommés sont généralement plus explicites. Le programme de Première utilise notamment les dictionnaires pour représenter ces enregistrements. Il ne faut pas ajouter une classe spécialisée pour répondre à tous les besoins : choisir une structure simple adaptée fait partie de la modélisation. Demandez-vous quelles informations doivent rester ensemble et si leur ordre suffit à expliquer leur rôle pour un lecteur du programme.

L’immuabilité du tuple concerne ses composantes directes. Un approfondissement ultérieur distinguera le tuple d’un objet modifiable éventuellement placé dedans. Ici, on utilise surtout des nombres et des textes pour que cette subtilité ne masque pas le rôle du regroupement.

Un déplacement construit une nouvelle position

Le point initial est (2, 5) et le déplacement vaut (3, -2). On additionne composante par composante pour obtenir (5, 3). Le point de départ peut être sauvegardé dans un autre nom avant le calcul : il reste alors disponible pour mesurer le déplacement ou revenir en arrière. Le tuple initial n’a pas été modifié.

Si l’on inverse les composantes de départ, on calcule (5 + 3, 2 - 2), soit (8, 0). Les opérations numériques restent valides ; seule la convention est violée. Utiliser des coordonnées distinctes dans un test rend cette inversion visible, alors qu’un point comme (4, 4) la masquerait.

Renvoyer deux informations cohérentes

Une fonction de mesure peut renvoyer (minimum, maximum) pour un tableau non vide. Pour [8, 3, 6], elle renvoie (3, 8). L’appelant calcule ensuite l’étendue avec la deuxième composante moins la première. Le contrat précise donc à la fois la signification et l’ordre des résultats.

Un seul élément donne deux résultats égaux et une étendue nulle. Le tableau vide nécessite une décision explicite, car il ne possède ni minimum ni maximum dans ce contrat. Le tuple résout le transport de plusieurs valeurs ; il ne résout pas automatiquement les cas où ces valeurs n’existent pas.

À vous de faire varier les choses

Déplacez un point sans perdre sa convention

Choisissez les coordonnées et le déplacement. Comparez le tuple initial, le résultat et une lecture qui inverse les positions.

Lire le résultat de l’expérience initiale

Nouveau tuple : (5, 3)

Le résultat contient x + dx puis y + dy. Le tuple initial reste inchangé.

Composante résultatValeur effectivement lueDéplacementRésultat
Indice 0 : x235
Indice 1 : y5-23

La structure conserve les valeurs ensemble ; le contrat donne un sens à leur ordre.

De la compréhension à l’autonomie

À vous de résoudre

Cherchez d’abord par vous-même. Vérifiez les résultats demandés, utilisez les indices si nécessaire, puis comparez votre méthode à la correction.

Exercice 1 · S’entraîner#

Lire une position

On définit point = (6, -2). Que valent point[0] et point[1] ? Que produit point[2] ?

Indice 1

Les indices commencent à zéro.

Indice 2

Un couple ne contient que deux composantes.

Comprendre la correction

point[0] vaut 6 et point[1] vaut -2. L’accès point[2] provoque une erreur d’indice, car il demande une troisième composante inexistante. Le nombre 2 représente ici une position, pas une valeur à rechercher. Cette distinction sera la même dans les tableaux et les chaînes.

Exercice 2 · S’entraîner#

Deux résultats liés

Une fonction renvoie (n // 4, n % 4). Pour n = 23, donnez le tuple puis les valeurs obtenues avec equipes, reste = fonction(23).

Indice 1

Cherchez le nombre de groupes complets de quatre.

Indice 2

Vérifiez 23 = 4 × quotient + reste.

Comprendre la correction

23 // 4 vaut 5 et 23 % 4 vaut 3. La fonction renvoie donc (5, 3), puis equipes reçoit 5 et reste reçoit 3. Les deux nombres décrivent la même division. Le tuple permet de conserver leur association et le contrat explique leur ordre.

Exercice 3 · S’entraîner#

Une modification interdite

Avec point = (2, 5), un élève écrit point[0] = 8. Expliquez l’erreur et proposez un nouveau tuple conservant la seconde coordonnée.

Indice 1

Le tuple est immuable, mais le nom point peut être réaffecté.

Indice 2

Lisez l’ancienne seconde composante pour construire une nouvelle valeur.

Comprendre la correction

L’affectation d’une composante est interdite pour un tuple. On peut écrire point = (8, point[1]). Python lit d’abord point[1], qui vaut 5, construit (8, 5), puis associe point à ce nouveau tuple. L’ancien tuple n’a pas été modifié : c’est l’association du nom qui change.

Exercice 4 · S’entraîner#

Choisir une représentation lisible

Un dossier contient un prénom, une classe, une adresse de contact et un statut d’inscription. Pourquoi des champs nommés peuvent-ils être préférables à quatre positions anonymes ?

Indice 1

Le lecteur doit reconnaître le sens de chaque donnée.

Indice 2

Le programme de Première propose les dictionnaires pour les enregistrements.

Comprendre la correction

Un accès comme dossier["classe"] indique le rôle du champ, contrairement à dossier[1] qui oblige à mémoriser une convention. Un dictionnaire rend donc cet enregistrement plus lisible. Le tuple reste adapté à de petits résultats ordonnés, comme quotient et reste, lorsque l’ordre est simple et clairement documenté.

Exercice 5 · Approfondir et relier#

Déplacer puis revenir

Le point P vaut (4, -1) et le déplacement D vaut (-3, 5). Calculez Q après déplacement, puis construisez le déplacement inverse et vérifiez le retour à P. Expliquez pourquoi conserver P dans un autre nom ne pose pas de problème pour ces tuples d’entiers.

Indice 1

Additionnez les composantes de même rôle.

Indice 2

Le déplacement inverse change le signe des deux composantes.

Comprendre la correction

Q vaut (1, 4). Le déplacement inverse est (3, -5) et donne (4, -1) lorsqu’on l’ajoute à Q. Construire Q ne modifie pas P : ce sont des tuples distincts. La sauvegarde de P reste donc utilisable pour comparer les positions avant et après.

Exercice 6 · Approfondir et relier#

Des bornes dans un ordre précis

Une fonction renvoie (minimum, maximum) pour [5, -2, 9, 5]. Donnez le résultat et l’étendue. Un appelant décompose en haut, bas. Quel calcul lui donnerait une étendue négative et comment corriger sans modifier la fonction ?

Indice 1

Les noms ne changent pas l’ordre des composantes reçues.

Indice 2

L’étendue est maximum moins minimum.

Comprendre la correction

Le résultat est (-2, 9) et l’étendue onze. Avec haut, bas, le nom haut reçoit moins deux et bas reçoit neuf. Calculer haut - bas donne moins onze. Il faut décomposer en bas, haut, conformément au contrat, puis calculer haut - bas. Les types numériques seuls ne détectent pas l’inversion.

Exercice 7 · Approfondir et relier#

Échanger trois informations

On a a = 2, b = 7, c = 9, puis a, b, c = c, a, b. Donnez les valeurs finales. Comparez avec les trois affectations successives a = c, b = a, c = b. Expliquez la différence par l’instant de lecture.

Indice 1

Dans la décomposition, tout le membre droit est évalué d’abord.

Indice 2

Dans les affectations successives, chaque ligne relit l’état courant.

Comprendre la correction

La décomposition donne a égal à neuf, b à deux et c à sept, car elle utilise les trois anciennes valeurs. Les affectations successives donnent neuf partout : après la première, b relit le nouvel a, puis c relit le nouveau b. Regrouper les valeurs préserve donc l’information nécessaire à la rotation.

Les erreurs qui méritent un détour

Dire qu’un tuple renvoie plusieurs objets séparément
La fonction renvoie un objet composé ; l’appelant peut ensuite décomposer ses composantes.
Confondre immuabilité et impossibilité de réaffecter le nom
On peut créer un nouveau tuple et l’associer au même nom sans modifier l’ancien objet.

La fiche à garder

L’essentiel à retenir

  • Un tuple regroupe des valeurs ordonnées.
  • Les indices commencent à zéro.
  • L’ordre des résultats fait partie du contrat de la fonction.

Cette notion au bac

Retrouvez ces idées dans un sujet complet, avec des indices, une correction expliquée et des ateliers.

Le prochain pas

Retrouver le catalogue de Première

Ce chapitre s’appuie sur le programme officiel de Première (PDF, nouvel onglet). Les explications et exercices sont proposés pour l’apprentissage.