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
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).
- a) Donner la valeur de
p[1].
- b) Expliquer pourquoi l'instruction
p[1] = 9provoque une erreur.
- c) Écrire une instruction qui affecte les trois valeurs de
paux variablesa,betc.
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.
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)
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.
- a) Donner la valeur de
t[0], det[3]et det[-1].
- b) Donner la valeur de
len(t).
- c) Écrire l'instruction qui remplace la valeur 8 par 10 dans
t.
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].
É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 :
- a) le tableau des carrés des entiers de 1 à 10 ;
- b) le tableau des entiers pairs compris entre 0 et 30 inclus ;
- 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.
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]
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.
- a) Donner la valeur de
notes[1][2].
- b) Écrire une boucle qui calcule et affiche la moyenne de chaque élève.
- c) Écrire une instruction qui construit le tableau des moyennes de tous les élèves avec une compréhension.
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.
- a) Donner le contenu de
maprès cette instruction et expliquer ce phénomène.
- b) Proposer une construction correcte avec une compréhension.
- c) Écrire une fonction
transposee(m)qui renvoie la transposée d'un tableau de tableaux rectangulairem.
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.
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.
- a) Donner la valeur de
d["Lyon"].
- b) Écrire l'instruction qui ajoute la ville de Nantes avec 320 000 habitants.
- c) Donner le résultat de
list(d.keys())avant l'ajout de Nantes.
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.
- a) Écrire une boucle qui affiche chaque produit avec sa quantité, en utilisant
items.
- b) Écrire une instruction qui calcule le nombre total de produits en stock, en utilisant
values.
- c) Écrire une fonction
vendre(stock, produit, n)qui retirenunités du produit si le stock est suffisant, et renvoieTrueouFalseselon que la vente a pu avoir lieu.
É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.
- a) Écrire la fonction.
- b) Donner le dictionnaire obtenu pour
"banane".
- c) Écrire une fonction
plus_frequente(d)qui prend un tel dictionnaire non vide et renvoie une lettre de fréquence maximale.
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.
- a) Écrire une fonction
plus_age(classe)qui renvoie le nom de l'élève le plus âgé.
- 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.
- c) Justifier que la complexité de
par_ageest linéaire en la taille declasse.
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.