1) Définition et opérations élémentaires sur les listes.
1)a) Introduction.
Le sujet est très vaste, et nous nous contenterons ici d'une approche très partielle, où nous ne donnerons que les éléments qui seront indispensables dans les projets.
Jusqu'à maintenant, nous sommes contentés de manipuler un petit nombres d'objets dans nos jeux : une balle et une raquette, par exemple. Dans une application plus complexe,
nous aimerions faire intervenir plus d'objets, par exemple :
Sur une telle application, le nombre de variables explose :
une variable pour chaque flocon de neige (item oval),
une variable pour l'abscisse de chaque flocon,
une variable pour l'ordonnée de chaque flocon ...
Pour faire tourner l'animation, il nous faut ensuite nous y retrouver dans toutes ces variables, et leurs appliquer à chacune des opérations similaires.
Les listes vont nous permettre d'oublier le nom de toutes ces variables, et de "factoriser le travail" !
De façon plus générale, les listes permettent de stocker et classer un grand nombre de données.
1)b) Définition des listes.
En Python, une liste est une collection d'objets (nombre, caractère, chaîne de caractères, images, item ... ), séparés par des virgules, l'ensemble étant enfermé dans des crochets.
nous pouvons constituer des listes d'objets de différents types (int, str ...), et même, placer dans une même liste, des objets de types différents (voir la liste composite ci-dessus),
Les liste sont ordonnées : les éléments sont donnés dans un ordre bien précis, et l'on peut accéder à chacun d'entre eux à l'aide de sa position dans la liste,
appelée son index.
Il faut cependant retenir que la numérotation dans la liste commence à partir de zéro, et non à partir de un.
En programmation, on dit ainsi que les objets listes sont "mutables". A l'opposé, d'autres types en Python sont immuables (non modifiables),
tels que les chaînes de caractères :
>>> texte = "Bonjour !"
>>> print(texte)
Bonjour !
>>> texte[1] = 'z'
TypeError: 'str' object does not support item assignment
>>> print(texte)
Bonjour !
Nous avons déjà constaté que la fonction print pouvait prendre en argument une liste pour l'afficher.
Il en est de même de la fonction len qui renvoie la longueur d'une liste (en anglais : length signifie longueur) :
En effet, la numérotation des éléments d'une liste commençant à 0, une liste de longueur 7, a son dernier élément numéroté 6.
De même, une liste à l éléments, voit son dernier élément numéroté l-1.
Ceci nous explique, par avance, pourquoi nous rencontrerons souvent "-1".
Que renvoie d'ailleurs l'instruction suivante ?
print(liste_jours[len(liste_jours)-1])
1)e) Parcourir les éléments d'une liste avec une boucle.
On peut assez naturellement envisager de parcourir une liste avec une boucle for :
Si ce premier exemple ne semble pas apporter beaucoup plus que la fonction print, il est en réalité bien plus puissant, dans la mesure où il nous
permet un accès séquentiel à tous les éléments de la liste, que nous pourrons par exemple modifier :
Imaginons un commerçant qui dispose, dans une liste à 5000 éléments, de tous les prix hors-taxes des articles vendus en magasin.
S'il a besoin pour sa comptabilité de la liste des prix TTC, celle-ci est obtenue en à peine 2 lignes de code, au lieu d'avoir 5000 opérations à effectuer !
On commence ainsi à percevoir la puissance de la "factorisation" offerte par les listes !
ce mécanisme de parcours des listes par les indices sera de loin celui que nous utiliserons le plus dans cette première approche de la programmation.
Il convient cependant de signaler que Python sait faire encore mieux : on peut parcourir les listes directement par les éléments :
>>> liste = [0, 1, 2, 4, 5]
>>> for element in liste :
... print(element+10)
10
11
12
14
15
2) Méthodes sur les listes.
2)a) Quelques mots de la programmation orientée objet : POO.
Nous avons déjà vu que certaines fonctions intégrées de Python (built-in functions), qui fonctionnnent sur les entiers ou les chaînes de caractères par exemple,
peuvent aussi fonctionner avec les listes : print ou len, par exemple.
Nous aimerions maintenant pouvoir ajouter un élément à une liste :
par exemple ajouter 4 à la liste [1, 2, 3], pour qu'elle devienne [1, 2, 3, 4].
C'est possible, mais aucune fonction intégrée de Python ne le fait.
Pour cela, nous devrons considérer que la liste est un objet,
et utiliser la méthode "append" (en anglais, append signifie ajouter) :
En python, absolument tout est objet :
un nombre, une chaîne de caractère, une liste, une fonction, une fenêtre (tK()), un widget (canevas, bouton, label...),
un item (oval, rectangle, text) : ce sont tous des objets, mais de types différents.
Une méthode, est une sorte de fonction attachée à un type d'objet précis.
Ainsi ci-dessus, la méthode "append" est une sorte de fonction intégrée aux objets du type liste. Elle peut, comme les fonctions classiques, prendre des arguments : 4, ci-dessus.
Cette méthode ne pourra bien entendu pas s'appliquer à un objet du type integer :
>>> nombre = 3
>>> nombre.append(4)
AttributeError: 'int' object has no attribute 'append'
La syntaxe pour appeler une méthode sera toujours de la forme :
objet.methode()
Nous avons déjà rencontrées de nombreuses méthodes au chapitre 8 :
Elles sont très nombreuses et nous contenterons pour l'instant de celles intervenants le plus fréquemment dans des projets d'ISN :
La méthode append :
pour ajouter l'élément elem à la fin de la liste liste :
liste.append(elem)
Exemple : construire la liste des nombres pairs de 2 à 26 :
>>> liste = [] # Création d'une liste vide
>>> for i in range(1, 14) :
... liste.append(2*i)
>>> print(liste)
[2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22, 24, 26]
Nous verrons dans le chapitre 10, et dans les projets, de très nombreux exemples d'utilisations des listes d'images ou d'items.
En application de ce qui a été vu dans ce chapitre, il vous est proposé un T.P. où nous verrons comment les listes peuvent nous permettre gérer simultanément, mais independamment, de nombreux objets graphiques :