I. Le type tableau¶
TP : Introduction aux tableaux¶
Créer un nouveau fichier, et l'enregistrer dans votre dossier NSI
, dans un nouveau dossier seq5
, sous le nom TP_Introduction_Tableaux.py
. Répondre aux questions dans votre cahier de TP.
Jusqu'à présent, nous avons manipulé des valeurs stockées dans des variables une par une. Mais les programmes traitent en général plus qu'une ou deux données à la fois.
-
On veut stocker les moyennes d'un petit groupe de 5 élèves. Au lieu d'utiliser 5 variables de type
float
, on les regroupe dans une seule. Taper dans votre éditeur l'instruction initialisant la variable :Exécuter le code et vérifier le contenu demoyennes = [10.2, 15.7, 7.3, 18.1, 9.5]
moyennes
en tapant son nom dans la console. -
Quel est le type de cette variable ? Appeler la fonction
type
dans la console avec la variablemoyennes
en entrée pour le savoir. -
Ce type Python correspond en fait à une structure de tableau. Pour accéder aux différents éléments, on utilise leur indice, qui donne leur position par rapport aux autres. Pour avoir l'élément d'indice 0, on écrit :
Quel est-il ?>>> moyennes[0]
-
Pour trouver l'indice des éléments, on compte de 1 en 1, donc en commençant à 0.
a. Quel doit être l'élément d'indice 1 ?
b. Le vérifier en remplaçant 0 par 1 dans l'instruction précédente. -
Pour l'exemple du tableau
moyennes
, remplir la correspondance entre la valeur de ses différents éléments et leur indice (rajouter des lignes pour avoir tous les éléments):indice moyennes[indice] 0 1 -
Quelle instruction faut-il taper pour obtenir la valeur
18.1
? -
La fonction
len(nom_du_tableau)
donne le nombre d'élément dans un tableau, autrement dit sa longueur. Que donne ici l'instruction suivante (dans la console) ?>>> len(moyennes)
-
Déduire de la question 5 quel est l'indice du dernier élément du tableau
moyennes
, en fonction de sa longueur donnée parlen(moyennes)
. -
Taper l'instruction suivante :
a. Quelle valeur renvoie-t-elle ? b. En déduire à quel indice positif, l'indice -1 est-il équivalent.>>> moyennes[-1]
-
On s'est trompé sur la valeur de la première moyenne du tableau. La corriger avec l'instruction suivante (dans l'éditeur) :
Vérifier que la correction a été faite.moyennes[0] = 11.0
-
Dans un tableau, on peut stocker autre chose que des nombres. Créer le tableau suivant, en le déclarant dans l'éditeur :
fruits = ['poire', 'cerise', 'pomme', 'abricot']
-
Remplir la correspondance entre les éléments du tableau
fruits
et leurs indices (rajouter les lignes nécessaires) :indice fruits[indice] 0 1 -
En déduire l'instruction pour obtenir la valeur
'cerise'
. -
Compléter le code suivant (le tester dans l'éditeur et compléter sur votre cahier) pour afficher la valeur de l'ensemble des éléments de
fruits
:for i in range(......): print(fruits[......])
-
Quelle instruction permet de modifier le dernier élément de
fruits
pour lui affecter la valeur'pêche'
?
Cours¶
Les types de bases manipulés jusqu'à présent ne permettent pas de manipuler des ensembles de valeurs, appelés en informatique des collections. Pour stocker des éléments d'un même type, on peut utiliser un tableau.
A. Définition¶
Un tableau est une collection d'éléments de même type, de taille fixée, stockés les uns à la suite des autres, dont la valeur est accessible grâce à leur indice.
En Python, on utilise le terme plus général de liste pour représenter des tableaux.
B. Création¶
On déclare un nouveau tableau en séparant ses éléments par des virgules, l'ensemble étant entouré de crochets. []
est un tableau vide.
Exemple
Pour stocker l'ensemble des nombres premiers inférieurs à 10, on peut utiliser un tableau appelé ici tab_premiers
:
tab_premiers = [2, 3, 5, 7]
tab_premiers
:

Solution

C. Indexation¶
Les éléments d'un tableau tab
sont indexés à partir de 0, jusqu'à la taille du tableau - 1 (en Python : len(tab)-1
). On accède à l'élément d'indice i
avec la syntaxe tab[i]
.
Exemple :
Pour l'exemple de tab_premiers
, associer chaque élément du tableau à son indice. Vérifier que l'indice du dernier élément correspond à len(tab_premiers)-1
.
élément | indice |
---|---|
2 | |
3 | |
5 | |
7 |
Solution
élément | indice |
---|---|
2 | 0 |
3 | 1 |
5 | 2 |
7 | 3 |
On a bien len(tab_premiers) -1 = 4-1 = 3, indice du dernier élément de tab_premiers . |
Quelle instruction permet d'afficher la valeur 3
? La valeur de l'élement d'indice 2
?
Solution
tab[1]
affiche la valeur 3
.
tab[2] affiche la valeur de l'élément d'indice
2`.
D. Modification¶
Il est possible de modifier la valeur d'un élément d'un tableau t
après sa création, en lui affectant une nouvelle valeur avec la syntaxe t[i] = v
.
Exemples
- Une erreur a été faite lors de la déclaration de
tab_premiers
:tab_premiers = [1, 3, 5, 7]
Ecrire l'instruction permettant de rectifier cette erreur.
tab_premiers[0] = 2
E. Parcours¶
Pour accéder à chacun des éléments les uns à la suite des autres, on peut utiliser une boucle bornée. Il y a deux manières de le faire :
E.I. Parcours par indice¶
Syntaxe
for i in range(len(t)):
print(t[i])
Exemple
Un tableau t
de taille 10 a été initialisé avec uniquement des 0
. On veut en fait qu'il contienne l'ensemble des chiffres de 0 à 9.
Ecrire une boucle permettant de modifier les valeurs de t
.
for i in range(len(t)):
t[i] = i
E.II. Parcours par valeur¶
Syntaxe
for e in t: # cette syntaxe est possible car caracteres est une séquence
print(e)
F. Création par compréhension¶
Pour créer des tableaux dont la taille peut être grande de manière automatique, on peut utiliser la création par compréhension. Cette méthode utilise une boucle et peut aussi intégrer une condition.
Exemples
t1 = [2**i for i in range(6)]
crée un tableau avec les puissances de2
de0
à5
. C'est-à-diret1
vaut ...
Solution
t1
vaut [1, 2, 4, 8, 16]
.
- Indiquer ce que contient
t2
:t2 = [i+5 for i in range(5)]
Solution
t2
vaut [5, 6, 7, 8, 9]
.
- Créer un tableau
t3
par compréhension stockant les valeurs au carré des nombres de1
à5
.
Solution
t3 = [i**2 for i in range(1,6)]
- Indiquer ce que contient
t4
:t4 = [i for i in range(10) if i%2 == 0]
Solution
t4
vaut [0, 2, 4, 6, 8]
.
G. Les tableaux à 2-dimensions¶
Un tableau à deux dimensions, appelé matrice, est un tableau dont chaque élément est aussi un tableau. On accède à un élément par son numéro de ligne i
et son numéro de colonne j
: si elle s'appelle mat
, cela correspond à mat[i][j]
.
Exemple :
mat = [[2,8,1], [3,9,0]]
a deux éléments, d'indice 0 et 1. Ces éléments comportent eux trois éléments.
- Compléter le tableau suivant :
indice | élément |
---|---|
0 | |
1 |
Solution
indice | élément |
---|---|
0 | [2,8,1] |
1 | [3,9,0] |
-
Le représenter sur le schéma suivant, et ajouter les numéros de ligne et de colonne :
Solution
-
Quelle instruction permet d'accéder à l'élément
3
? L'élément2
?Solution
mat[1][0]
permet d'accéder à3
etmat[0][0]
à2
.
TP : La bibliothèque matplotlib
¶
Pour ce TP, créer un dossier TP_Matplotlib
dans votre dossier NSI
, dossier seq5
, et enregistrer un nouveau fichier pour chaque tracé.
La bibliothèque matplotlib
(pour "mathematic plot library") sert à représenter des données sous la forme de graphiques, on utilise son module pyplot
. Avant de commencer, écrire l'import de la librairie en haut du fichier Python :
from matplotlib.pyplot import *
A. Graphiques simples¶
-
Pour représenter des abscisses, notées
x
, en fonction d'ordonnées, notéesy
, on utilise des tableaux. Par exemple :Code
x = [0, 1, 2, 3] y = [3, 4, -1, 2] plot(x, y) # on trace x en fonction de y show() # on montre le graphique
Exécuter ce code dans un fichier
graphe1.py
. Le graphique doit apparaître à l'écran. -
On peut changer l'apparence des points (couleur et forme) en rajoutant un paramètre à la fonction
plot
. Essayez le code avec les différents appels suivant de la fonction :Code
plot(x, y, 'r') plot(x, y, 'rs') plot(x, y, 'b') plot(x, y, 'bo')
Noter ce qui change à chaque fois.
-
Plutôt que de rentrer les valeurs des abscisses et ordonnées à la main dans le tableau, on peut créer des tableaux automatiquement avec la compréhension.
a. La compréhension utilise une boucle entre les crochets pour affecter directement une valeur à chaque élément du tableau.
[i for i in range(10)]
crée le tableau[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
On peut manipuler les paramètres durange
ou bien faire des opérations sur la variablei
pour créer d'autres tableau. Quelle instruction permet de créer par compréhension le tableau[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
? La tester dans la console.b. On veut représenter la fonction \(f(x) = 3x\). Recopier le code suivant dans un fichier
graphe2.py
et le compléter avec le tableau desy
pour obtenir les bonnes valeurs.Code
x = [i for i in range(100)] # permet de représenter 100 points y = ... # à compléter - y doit être de taille 100 aussi plot(x, y) # vous pouvez rajouter le 3ème paramètre qui vous convient le mieux show()
Ne pas oublier de faire l'import de la bibliothèque en début de fichier.
-
On peut représenter des fonctions plus complexes. Dans un fichier
graphe_cos.py
, importer la fonctioncos
de la bibliothèquemath
avec l'instructionfrom math import cos
placée en début de fichier. Compléter l'instructions remplissant le tableauxordonnees
pour représenter la fonction \(f(x) = cos(x)\).Code
abscisses = [i for i in range(100)] ordonnees = ... # à compléter - y doit être de taille 100 aussi plot(abscisses, ordonnees) show()
B. Diagramme en barres et histogrammes¶
-
Le code est similaire pour représenter des diagrammes en barres : il faut une variable
x
associée à une variabley
qui correspond à la hauteur des barres. On utilise la fonctionbar
à la place de la fonctionplot
. Exécuter le code suviant, dans un fichierbarres.py
:Code
x = [3, 5, 6, 7] y = [4, 1, 3, 4] bar(x, y) show()
Le modifier pour avoir les valeurs
1
,2
,3
,4
et5
en ordonnéey
, associées aux abscissesx
allant de3
à7
. -
La fonction
hist
permet de représenter des histogrammes. Il faut lui donner en paramètre une liste de valeurs, et le nombre de groupes à tracer parmi ces valeurs, et la fonction représente le nombre de fois qu'apparaîssent les différentes valeurs dans chaque groupe.Par exemple, on peut tracer combien de fois on tombe sur chacun des chiffres de 1 à 6 en lançant un dé à 6 faces 100 fois, en utilisant la fonction
randint
de la bibliothèquerandom
(il faut rajouterfrom random import randint
au début du fichier). Compléter le code suivant, dans un fichierhistogramme.py
:Code
liste =[randint(...) for _ in range(100)] hist(liste, 6) show()
C. Nuage de points¶
-
La fonction
scatter
permet de représenter des nuages de points, dont on donne l'abscissex
et l'ordonnéey
. Utiliser la compréhension pour créer les 2 listesx
ety
de taille1000
, en tirant à chaque fois au hasard un nombre entre1
et100
. Enregistrer le code suivant dans un fichiernuage1.py
.Code
x = [ randint(...) for i in range(...)] y = ... scatter(x,y, c='red') # il faut ici rajouter le nom de paramètre c pour changer la couleur show()
-
On peut faire plusieurs graphiques sur un seul, il suffit d'appeler plusieurs fois la fonction de tracé (ici
scatter
) avant de faire appel àshow
.
Générer 3 tirages différents pourx
ety
, et les représenter sur le même graphique en utilisant des couleurs différentes. L'enregistrer dans un fichiernuage2.py
.
D. Camemberts¶
-
Les camemberts (fonction
pie
) permettent de représenter la répartition de données entre différentes catégories. Les catégories ont un nom et une taille (un nombre de données).On veut représenter la répartition d'animaux : 15 animaux dans la catégorie
Loup
, 30 dans la catégorieRenard
, 45 pourBelette
et 10 pourJument
. Compléter les listesnoms
ettailles
pour obtenir le graphique demandé. Enregistrer le code souscamembert.py
.Code
noms = ... tailles = ... pie(tailles, labels=noms) show()
TD¶
Exercice 1 :¶
Qu'affiche le programme suivant ?
Code
t = ["un", "trois", "deux"]
print(t[1], t[2])
Exercice 2 :¶
Comment accéder sans erreur au 5ème élément d'un tableau t
dont on ne connaît pas encore la taille ?
Code
# proposition a
a = t[5]
# proposition b
if len(t) > 4:
a = t[4]
# proposition c
if len(t) >= 5:
a = t[4]
# proposition d
if len(t) > 4:
a = t[5]
# proposition e
if len(t) == 5:
a = t[4]
# proposition f
a = t[4]
Exercice 3 : les jours¶
-
Ecrire une instruction Python stockant le nom des sept jours de la semaine dans un tableau nommé
jours
. -
Ecrire un programme permettant d'afficher le noms des sept jours, en utilisant une boucle et la fonction renvoyant la longueur d'un tableau.
Exercice 4 : ajouter des éléments à un tableau (sur ordinateur)¶
Un tableau est une structure de taille fixe. Dans certains cas, ce n'est pas pratique car on veut pouvoir rajouter des éléments au fur et à mesure.
-
Il est possible de le faire avec l'opérateur
+
. Exécuter le code suivant :Code
t = [-1, 0, 1, 2] t = t + [3]
- Ecrire un programme créant un tableau vide, et ajoutant successivement les valeurs
5
,10
,15
et20
.
- Ecrire un programme créant un tableau vide, et ajoutant successivement les valeurs
-
Ecrire une fonction
multiples1000(n)
prenant en paramètre un entier positifn
et renvoyant un tableau contenant les multiples den
strictement inférieurs à 1000. -
Ecrire une fonction
trie_pairs(t)
prenant en paramètre un tableau d'entierst
et renvoyant un nouveau tableau ne contenant que les entiers pairs det
.
Exercice 5 : la compréhension¶
-
Ecrire une instruction permettant de créer par compréhension un tableau contenant la table de multiplication de
6
(donc les valeurs allant de1*6
à9*6
). -
Ecrire une instruction permettant de créer par compréhension un tableau à 2 dimensions contenant les tables de multiplication de tous les chiffres de 2 à 9.
Code
[[2, 4, 6, 8, 10, 12, 14, 16, 18], # table de 2 [3, 6, 9, 12, 15, 18, 21, 24, 27], # table de 3 ... # etc [9, 18, 27, 36, 45, 54, 63, 72, 81]] # table de 9
Exercice 6 : multiples¶
Ecrire une fonction multiples10(n)
prenant en paramètre un entier positif n
et renvoyant un tableau contenant les 10 premiers multiples non nuls de n
.
On utilisera un tableau de taille 10, initialisé par compréhension avec des 0.
Exercice 7 : morpion¶
-
Ecrire une instruction permettant de générer le tableau à 2 dimensions représentant le jeu du morpion ci-dessous.
-
C'est au joueur ayant les
'X'
de jouer. Ecrire l'instruction qui lui permet de gagner (il faut qu'il aligne 3'X'
!). -
Ecrire un programme parcourant tous les éléments du tableau à 2 dimensions les uns après les autres (il faut utiliser 2 boucles imbriquées).
Exercice 8 : QCM¶
-
On dispose d'une liste définie par
L = [15,17,12,23]
.
Quelle est la valeur deL
après l'instructionL[2] = 25
?
A[15,25,12,23]
B[15,17,25,12,23]
C[15,17,25,23]
D[15,17,12,25,23]
-
On définit ainsi une liste M :
M = [['A','B','C','D'], ['E','F','G','H'], ['I','J','K','L']]
Quelle expression vaut la chaîne de caractères'H'
?
AM[1][3]
BM[3][1]
CM(7)
DM(8)
-
Que vaut l'expression
[ 2*k for k in range(5) ]
?
A[0,2,4,6,8]
B[2,4,6,8,10]
C[1,2,4,8,16]
D[2,4,8,16,32]
-
On exécute le code suivant :
Code
A = [ [1,2,3], [4,5,6], [7,8,9] ] B = [ [0,0,0], [0,0,0], [0,0,0] ] for i in range(3): for j in range(3): B[i][j] = A[j][i]
Que vaut
B
à la fin de l'exécution ? A rien du tout, le programme déclenche une erreur d'exécution
B[ [3,2,1], [6,5,4], [9,8,7] ]
C[ [1,4,7], [2,5,8], [3,6,9] ]
D[ [7,8,9], [4,5,6], [1,2,3] ]