KlarIA
💻 NSI (spécialité)1ereCours

Types construits : p-uplets, tableaux, dictionnaires

📖

Cours

Types construits : p-uplets, tableaux, dictionnaires

Un entier, un flottant, un booléen, une chaîne : avec les types de base, une variable contient une seule valeur.

Or un programme manipule sans cesse des groupes de valeurs : les coordonnées d'un point, les notes d'une classe, la fiche d'un élève.

Les types construits assemblent plusieurs valeurs en une seule. Python en propose trois, qui répondent à trois besoins différents.

Type construitEn PythonExempleOn y accède par
p-uplettuple(3, 5)la position
tableaulist[12, 7, 15]l'index
dictionnairedict{"nom": "Diallo", "age": 16}la clé

1. Les p-uplets

1.1 Regrouper des valeurs

>>> point = (3, 5)
>>> date = (14, 7, 1789)
>>> point[0]
3
>>> date[2]
1789
>>> len(date)
3

Un couple est un p-uplet de 22 valeurs, un triplet en contient 33.

>>> point = (3, 5)
>>> point[0] = 4
Traceback (most recent call last):
  File "<console>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment
>>> point = (4, 5)

1.2 Une fonction qui renvoie plusieurs valeurs

C'est l'usage principal des p-uplets.

L'instruction return a, b renvoie le couple (a, b), que l'on peut déballer dans deux variables d'un seul coup.

Essaie avec d'autres notes, puis affiche directement min_max([4, 4, 4]) : tu verras les parenthèses du couple.

De la même façon, la fonction divmod(17, 5) renvoie (3, 2) : le quotient et le reste de la division de 1717 par 55.

1.3 Quand les positions ne suffisent plus

Dans date = (14, 7, 1789), il faut se souvenir que la position 22 est l'année.

Avec dix champs, le code devient illisible.

On préfère alors donner un nom à chaque valeur : c'est le rôle du dictionnaire, présenté dans la partie 3.

P-uplet, tableau, dictionnaire

2. Les tableaux

2.1 Tableau indexé

>>> notes = [12, 7, 15, 9, 18]
>>> notes[0]
12
>>> notes[4]
18
>>> len(notes)
5

Contrairement au p-uplet, un tableau est modifiable : on change une case avec t[i] = valeur.

Remplace i par 44, puis par 55 : que se passe-t-il ? Essaie aussi i = -1.

2.2 Parcourir un tableau

Il y a deux façons de parcourir un tableau, et il faut savoir choisir.

# Quand on n'a pas besoin de la position
notes = [12, 7, 15, 9, 18]
total = 0
for note in notes:
    total = total + note

Voici un comptage, écrit avec un parcours par les éléments.

Les algorithmes à savoir écrire avec un parcours : somme, moyenne, maximum, recherche d'un élément, comptage des éléments qui vérifient une condition.

2.3 Construire un tableau

Il existe quatre façons de construire un tableau.

  • Par énumération : t = [1, 2, 3], et t = [] pour un tableau vide.
  • Par répétition : [0] * 5 donne [0, 0, 0, 0, 0].
  • Par ajouts successifs : t.append(x) ajoute x à la fin.
  • Par compréhension, en une seule ligne.

Modifie la condition pour ne garder que les notes supérieures ou égales à 1010.

2.4 Tableaux de tableaux : les matrices

Un tableau dont les éléments sont eux-mêmes des tableaux représente une grille : une matrice, une image, un plateau de jeu.

m[i] est la ligne ii, et m[i][j] est l'élément de la ligne ii et de la colonne jj.

>>> m = [[3, 8, 1, 6],
...      [5, 2, 9, 4],
...      [7, 0, 3, 8]]
>>> m[1]
[5, 2, 9, 4]
>>> m[1][2]
9
>>> len(m)
3
>>> len(m[0])
4

Retiens l'ordre : la ligne d'abord, la colonne ensuite.

Cherche la valeur 00, puis le dernier 88. Que se passe-t-il si tu inverses les rôles, avec i = 2 et j = 3, puis i = 3 et j = 2 ?

Pour parcourir toute la grille, il faut deux boucles imbriquées : une pour les lignes, une pour les colonnes.

Vérifie-le toi-même : une seule case est modifiée, mais regarde l'affichage.

3. Les dictionnaires

3.1 Clés et valeurs

Un dictionnaire représente naturellement un enregistrement dont les champs portent un nom : c'est le p-uplet nommé annoncé dans la partie 1.

>>> eleve = {"nom": "Diallo", "prenom": "Aïcha", "age": 16}
>>> eleve["age"]
16
>>> eleve["age"] = 17
>>> eleve["ville"] = "Lyon"
>>> eleve
{'nom': 'Diallo', 'prenom': 'Aïcha', 'age': 17, 'ville': 'Lyon'}
>>> "nom" in eleve
True
>>> len(eleve)
4

La même écriture d[cle] = valeur modifie l'entrée si la clé existe, et la crée sinon.

Un dictionnaire vide s'écrit d = {}.

Ajoute la ligne print(eleve["taille"]) et relance : tu obtiens la KeyError annoncée.

3.2 Parcourir un dictionnaire

Il y a trois parcours possibles, selon ce dont on a besoin.

for cle in eleve.keys():
    print(cle)

# On peut écrire plus simplement : for cle in eleve

Les entrées sont parcourues dans l'ordre où elles ont été ajoutées.

3.3 Un classique : compter les occurrences

On veut savoir combien de fois chaque lettre apparaît dans un mot.

Le dictionnaire est l'outil idéal : la lettre est la clé, le nombre d'apparitions est la valeur.

3.4 Combiner les types

Les types construits se combinent librement.

Un tableau de dictionnaires représente une liste d'enregistrements : c'est une table de données, l'objet du chapitre suivant.

Lis classe[1]["note"] de gauche à droite : l'élève d'index 11, puis sa note.

4. Exemple résolu pas à pas

Cherche d'abord sur papier, puis déplie chaque correction et exécute-la.

Correction · Question a

On garde les valeurs qui vérifient la condition x > 20.

chaudes = [x for x in temp if x > 20] donne [21, 25, 23, 27, 22].

Correction · Question b

On a besoin de la position du minimum, donc d'un parcours par les index.
On retient l'index du plus petit élément rencontré jusqu'ici, et on renvoie un p-uplet.

def minimum(t):
    i_min = 0
    for i in range(len(t)):
        if t[i] < t[i_min]:
            i_min = i
    return t[i_min], i_min

minimum(temp) renvoie (18, 0).

Correction · Question c

On remplit le dictionnaire entrée par entrée, puis on le parcourt par ses couples.

jours = ["lun", "mar", "mer", "jeu", "ven", "sam", "dim"]
meteo = {}
for i in range(7):
    meteo[jours[i]] = temp[i]

for jour, t in meteo.items():
    if t > 22:
        print(jour)

Le programme affiche mer, ven et sam.

Le programme complet, pour vérifier et expérimenter :

À retenir

Révise ce chapitre avec KlarIA

Tuteur qui t'explique pas à pas, quiz pour t'entraîner, flashcards pour mémoriser. Gratuit.

Créer mon compte gratuitement