Retour à la page d'accueilNSI · Première (spé maths) · Changer de matière
Commencer gratuitement
Première (spé maths) · NSI
Types construits et algorithmique en première NSI · Types construits en Python

p-uplets, tableaux et dictionnaires

Tu veux ranger les notes d'une classe, les habitants des villes de France ou les stocks d'une boulangerie. Une variable ne contient qu'une seule valeur : il faut donc des types qui en regroupent plusieurs. Comment choisir entre p-uplet, tableau et dictionnaire, et comment les manipuler sans piège ?

Les p-uplets

Un p-uplet (en Python, un tuple) regroupe plusieurs valeurs entre parenthèses. On accède à un élément par son indice, qui commence à 0.

p = (3, 7, 11)

print(p[1])      # 7

print(len(p))    # 3

Pourquoi cette contrainte ? Elle garantit qu'une donnée regroupée (par exemple les coordonnées d'un point) ne change pas par accident.

Un p-uplet permet aussi à une fonction de renvoyer plusieurs valeurs et de les récupérer par affectation multiple :

def quotient_reste(a, b):

    return a // b, a % b      # p-uplet (q, r)

q, r = quotient_reste(17, 5)  # q = 3, r = 2
Entraîne-toi★☆☆Pas commencé
On définit le p-uplet p = (3, 7, 11). a) Donner la valeur de p[1]. b) Expliquer pourquoi l'instruction p[1] = 9 provoque une erreur. c) Écrire une instruction qui…

On définit le p-uplet p = (3, 7, 11).

  1. a) Donner la valeur de p[1].
  1. b) Expliquer pourquoi l'instruction p[1] = 9 provoque une erreur.
  1. c) Écrire une instruction qui affecte les trois valeurs de p aux variables a, b et c.
Résoudre

Les tableaux

Un tableau est une suite indexée d'éléments, ici de même type. En Python, il est représenté par une list, entre crochets.

Le tableau t contient 12, 5, 8, 20, 7 aux indices 0 à 4, ou -5 à -1 1258207 01234 -5-4-3-2-1
t = [12, 5, 8, 20, 7]

print(t[0], t[3], t[-1])   # 12 20 7

print(len(t))              # 5

t[2] = 10                  # t vaut [12, 5, 10, 20, 7]

t.append(30)               # ajoute à la fin

Les indices vont de 0 à len(t) - 1. L'indice -1 désigne le dernier élément. Accéder à t[5] ici provoque une IndexError.

Pour parcourir un tableau, deux façons :

for i in range(len(t)):    # par indice

    print(i, t[i])

for x in t:                # par élément

    print(x)
Entraîne-toi★☆☆Pas commencé
On considère le tableau t = [12, 5, 8, 20, 7] en Python. a) Donner la valeur de t[0], de t[3] et de t[-1]. b) Donner la valeur de len(t). c) Écrire l'instruction qui…

On considère le tableau t = [12, 5, 8, 20, 7] en Python.

  1. a) Donner la valeur de t[0], de t[3] et de t[-1].
  1. b) Donner la valeur de len(t).
  1. c) Écrire l'instruction qui remplace la valeur 8 par 10 dans t.
Résoudre

Construire un tableau par compréhension

Plutôt qu'une boucle avec append, on peut décrire le tableau en une ligne : [expression for x in séquence if condition].

Entraîne-toi★★☆Pas commencé
Écrire en Python, avec une compréhension de tableau : a) le tableau des carrés des entiers de 1 à 10 ; b) le tableau des entiers pairs compris entre 0 et 30 inclus ; c)…

Écrire en Python, avec une compréhension de tableau :

  1. a) le tableau des carrés des entiers de 1 à 10 ;
  1. b) le tableau des entiers pairs compris entre 0 et 30 inclus ;
  1. c) à partir de notes = [12, 8, 15, 9, 17, 11], le tableau des notes supérieures ou égales à 10, augmentées chacune d'un point.
Résoudre

Tableaux de tableaux

Un tableau dont les éléments sont des tableaux représente une matrice (ou une grille) : a[i][j] est l'élément de la ligne i et de la colonne j.

notes = [[12, 15, 9], [8, 11, 14], [16, 13, 17]]

print(notes[1][2])    # 14 : élève 1, troisième note

On parcourt avec deux boucles imbriquées, ou avec une compréhension :

for ligne in notes:

    print(sum(ligne) / len(ligne))

moyennes = [sum(l) / len(l) for l in notes]
Entraîne-toi★★☆Pas commencé
Un professeur du lycée Camille Claudel à Paris range les notes de trois élèves dans un tableau de tableaux : notes = [[12, 15, 9], [8, 11, 14], [16, 13, 17]], chaque…

Un professeur du lycée Camille Claudel à Paris range les notes de trois élèves dans un tableau de tableaux :

notes = [[12, 15, 9], [8, 11, 14], [16, 13, 17]], chaque ligne correspondant à un élève.

  1. a) Donner la valeur de notes[1][2].
  1. b) Écrire une boucle qui calcule et affiche la moyenne de chaque élève.
  1. c) Écrire une instruction qui construit le tableau des moyennes de tous les élèves avec une compréhension.
Résoudre
Entraîne-toi★★★Pas commencé
On souhaite créer un tableau de 3 lignes et 4 colonnes rempli de zéros. Un élève propose : m = [[0] * 4] * 3 puis exécute m[0][1] = 5. a) Donner le contenu de m après…

On souhaite créer un tableau de 3 lignes et 4 colonnes rempli de zéros. Un élève propose :

m = [[0] * 4] * 3

puis exécute m[0][1] = 5.

  1. a) Donner le contenu de m après cette instruction et expliquer ce phénomène.
  1. b) Proposer une construction correcte avec une compréhension.
  1. c) Écrire une fonction transposee(m) qui renvoie la transposée d'un tableau de tableaux rectangulaire m.
Résoudre

Les dictionnaires

Un dictionnaire associe des valeurs à des clés : {clé: valeur}. On accède à une valeur par sa clé, pas par un indice.

d = {"Paris": 2161000, "Lyon": 522000, "Lille": 236000}

print(d["Lyon"])           # 522000

d["Nantes"] = 320000       # ajout d'une entrée

d["Lyon"] = 523000         # modification

print("Lille" in d)        # True : test sur les clés

Les clés sont uniques. Lire une clé absente provoque une KeyError.

Pour parcourir un dictionnaire :

for ville in d.keys():            # les clés (ou for ville in d)

    print(ville)

for h in d.values():              # les valeurs

    print(h)

for ville, h in d.items():        # les couples (clé, valeur)

    print(ville, h)

d.keys() donne les clés, d.values() les valeurs, d.items() les couples. Pour obtenir un tableau, on écrit list(d.keys()).

Un dictionnaire sert aussi de p-uplet nommé : eleve = {"nom": "Martin", "prenom": "Léa", "age": 16}. Chaque champ a un nom, plus lisible qu'un indice.

Entraîne-toi★☆☆Pas commencé
On considère le dictionnaire d = {"Paris": 2161000, "Lyon": 522000, "Lille": 236000} qui associe à une ville son nombre d'habitants. a) Donner la valeur de d["Lyon"]. b)…

On considère le dictionnaire d = {"Paris": 2161000, "Lyon": 522000, "Lille": 236000} qui associe à une ville son nombre d'habitants.

  1. a) Donner la valeur de d["Lyon"].
  1. b) Écrire l'instruction qui ajoute la ville de Nantes avec 320 000 habitants.
  1. c) Donner le résultat de list(d.keys()) avant l'ajout de Nantes.
Résoudre
Entraîne-toi★★☆Pas commencé
Le dictionnaire stock = {"baguette": 40, "croissant": 25, "pain au chocolat": 30} représente le stock d'une boulangerie de Toulouse. a) Écrire une boucle qui affiche…

Le dictionnaire stock = {"baguette": 40, "croissant": 25, "pain au chocolat": 30} représente le stock d'une boulangerie de Toulouse.

  1. a) Écrire une boucle qui affiche chaque produit avec sa quantité, en utilisant items.
  1. b) Écrire une instruction qui calcule le nombre total de produits en stock, en utilisant values.
  1. c) Écrire une fonction vendre(stock, produit, n) qui retire n unités du produit si le stock est suffisant, et renvoie True ou False selon que la vente a pu avoir lieu.
Résoudre
Entraîne-toi★★★Pas commencé
Écrire une fonction frequences(texte) qui prend en paramètre une chaîne de caractères et renvoie un dictionnaire associant à chaque lettre son nombre d'occurrences. a)…

Écrire une fonction frequences(texte) qui prend en paramètre une chaîne de caractères et renvoie un dictionnaire associant à chaque lettre son nombre d'occurrences.

  1. a) Écrire la fonction.
  1. b) Donner le dictionnaire obtenu pour "banane".
  1. c) Écrire une fonction plus_frequente(d) qui prend un tel dictionnaire non vide et renvoie une lettre de fréquence maximale.
Résoudre
Entraîne-toi★★★Pas commencé
Un p-uplet nommé est représenté par un dictionnaire : eleve = {"nom": "Martin", "prenom": "Léa", "age": 16}. On dispose d'une liste classe de tels dictionnaires. a)…

Un p-uplet nommé est représenté par un dictionnaire : eleve = {"nom": "Martin", "prenom": "Léa", "age": 16}. On dispose d'une liste classe de tels dictionnaires.

  1. a) Écrire une fonction plus_age(classe) qui renvoie le nom de l'élève le plus âgé.
  1. b) Écrire une fonction par_age(classe) qui renvoie un dictionnaire dont les clés sont les âges et les valeurs les listes des noms des élèves de cet âge.
  1. c) Justifier que la complexité de par_age est linéaire en la taille de classe.
Résoudre

L'essentiel

Vers le début : p-uplet pour des données fixes, tableau pour une suite ordonnée, dictionnaire pour un accès par nom.

Voir tous les exercices de cette partie