TP1-PROG-08 - Les listes (tableaux)
Contents
TP1-PROG-08 - Les listes (tableaux)#
Objectifs#
Manipuler les listes en Python
Créer, modifier, supprimer des listes 1D et 2D
Appliquer sur la gestion d’un horaire automatique d’une gare CFF
Les listes#
En Python, une liste est une structure de donnée. On peut le voir comme un tableu en une dimension (ou Tableau 1D)
Elle est caractérisée par :
des crochets
[]
, etses éléments (variables ou valeurs) sont séparés par une virgule
,
Chaque élément de la liste se distingue par sa valeur et son index. L’index décrit la position de l’élément dans la liste. Le premier élément a l’index 0
, puis le second 1
et ainsi de suite.
Il y a donc une syntaxe pour chacune des opérations suivantes :
créer une liste vide
ajouter un élément à une liste
accéder et modifier un élément à une liste
enlever un élément à une liste
Créer une liste vide#
Pour créer une liste vide, on affecte à une variable un objet liste vide
# Créer une liste vide
uneListe = []
Ajouter un élément à une liste#
Pour ajouter un nouvel élément element
à la liste, il existe deux façon :
A la fin de la liste : on utilise la méthode (c’est comme une fonction)
uneListe.append(element)
A l’index
i
, on utilise la fonctionuneListe.insert(i, element)
# Ajouter la chaîne de caractères 'salut' à la fin de la liste
uneListe.append('salut')
# Afficher la liste
print(uneListe)
# Ajouter le valeur `0.618' à l'index 1
uneListe.insert(1,0.618)
# Afficher la liste une seconde fois
print(uneListe)
['salut']
['salut', 0.618]
Accéder aux éléments d’une liste#
On accède aux éléments de la liste avec l’index de l’élément. Le premier index est toujours 0
. Par exemple:
# Création d'une liste avec une chaîne de caractères, un entier et un float
uneListe = ['une chaîne de caractères',4,3.14]
# On accède au deuxième élément avec :
uneListe[1]
# On imprime le deuxième élément :
print(uneListe[0])
une chaîne de caractères
# On imprime le premier élément :
print(uneListe[0])
une chaîne de caractères
# On imprime le troisième élément :
print(uneListe[2])
3.14
Modification d’un élément de la liste#
On peut modifier un élément en y accédant à l’aide de l’indice i
comme on accède à l’élément à l’index i
## Modification de 3.14 en 6.28
uneListe[2] = 6.18
# Affichage de la liste
print(uneListe)
['une chaîne de caractères', 4, 6.18]
Enlever un élément à une liste#
On peut enlever des éléments avec les méthodes suivantes :
list.remove(x)
si l’élémentx
existelist.pop()
le dernier élémentlist.clear()
tous les éléments
# Suppression de 0.618
uneListe.remove(6.18)
# Affichage de la liste
print(uneListe)
['une chaîne de caractères', 4]
# Suppression du dernier élément
uneListe.pop()
# Affichage de la liste
print(uneListe)
['une chaîne de caractères']
# Effacement de tous les éléments de la liste
uneListe.clear()
# Affichage de la liste vide
print(uneListe)
[]
Longueur d’une liste#
La fonction len(list)
retourne la longueur de la liste list
uneListe = ['une chaîne de caractères',4,3.14]
len(uneListe)
3
Affichage de l’horaire des trains en gare#
Un horaire CFF est un tableau en 2 dimensions. Chaque ligne de ce tableau représente un train. Chaque train a les caractéristiques suivantes :
un type (un RER, un Interregio, un Intercity, etc..)
une heure de départ
la gare de destination
une voie d’arrivée
Un train peut donc se modéliser à l’aide d’une liste
Création des trains#
Chaque train
est une liste qui possède autant d’éléments qu’il y a de caractéristiques dans l’horaire, séparées par une virgule ,
:
type (
str
)heure de départ (
str
)destination (
str
)la voie sur laquelle il va arriver (
int
)
train1 = ['S22', '8h47', 'Vufflens-la-Ville', 1]
train2 = ['S2', '8h51', 'Aigle', 4]
train3 = ['S4', '8h55', 'Palézieux', 3]
Exercice 1 : Ajout d’un train#
Définissez la liste train4
selon l’horaire affiché par l’image : c’est un S1 à destination de Lausanne qui arrive sur la voie 4 à 8h57
Horaire CFF : définition#
L’horaire à modéliser est une liste de listes : chaque element
de la liste est une liste.
En informatique, on parle d’un tableau 2D ou tableau à deux dimensions. Chaque colonne représente les caractéristiques d’un train (type, heure de départ, destination, etc..) et chaque ligne représente un train.
Exercice 2 : création de l’horaire#
A l’aide des fonctions de création et d’ajout, créez une variable horaire
qui contient les quatre variables créées à l’exercice 1.
Exercice 3 : Affichez un train#
A l’aide de la fonction d’accès à un élément de la liste horaire
, affichez le train qui part à 8h55.
Exercice 4 : Affichez une destination#
A l’exercice précédent, vous avez affiché une liste qui contient 4 éléments : c’est un train. Il est maintenant possible d’afficher un seul élément de cette liste à l’aide de la fonction d’accès à un élément.
stockez le train qui se trouve à la position 2 dans une variable
tchoutchou
(de type liste)affichez la destination à l’aide de la position dans cette variable
Exercice 5 : accéder à un élément dans le tableau d’affichage#
En utilisant uniquement la variable horaire
:
Affichez l’heure de départ du troisième train dans le tableau.
Affichez la destination du premier train
Affichez la voie d’arrivée du second train
Cet exercice demande un peu de réflexion : vous manipulez la variable horaire
qui est une liste de listes ! Il vous faut donc accéder à l’élément qui se trouve en troisième position dans la liste qui se trouve en deuxième position dans la liste de listes.
Exercice 6 : ajouter un train#
Ajoutez à votre horaire le S1 pour Lausanne en voie 4 qui part à 8h57
Exercice 7 : perturbations !#
En cet hiver difficile, la ligne de contact souffre. Le train S4 pour Palézieux aura 20 minutes de retard. Il faut modifier l’entrée et ajouter une information dans la colonne remarques de l’horaire. Attention : uniquement pour ce train -là !
Le résultat devrait être :
['S4', '8h55 + 20min', 'Palézieux', 3, 'Problème sur la ligne de contact']
Modifiez donc votre horaire en utilisant uniquement la variable horaire
Exercice 8 : “Mince ! J’ai raté mon train”#
A mesure que le temps passe, les trains entrent en gare, prennent des voyageurs et en laissent descendre d’autres, puis repartent vers leur destination. Il faut donc les supprimer de l’horaire affiché en gare.
Supprimez le premier train de l’horaire (celui qui se trouve à l’index 0
Affichage de l’horaire complet#
Si notre horaire est construit ainsi :
train1 = ['S22', '8h47', 'Vufflens-la-Ville', 1]
train2 = ['S2', '8h51', 'Aigle', 4]
train3 = ['S4', '8h55', 'Palézieux', 3]
train4 = ['S1', '8h57', 'Lausanne', 4]
horaire = []
horaire.append(train1)
horaire.append(train2)
horaire.append(train3)
horaire.append(train4)
on peut afficher l’entier de l’horaire dans la console sous une forme agréable à l’aide d’une boucle for
.
for i in range(len(horaire)):
print(horaire[i])
['S22', '8h47', 'Vufflens-la-Ville', 1]
['S2', '8h51', 'Aigle', 4]
['S4', '8h55', 'Palézieux', 3]
['S1', '8h57', 'Lausanne', 4]
Exercice 9 L’affichage sur les quais#
Chaque quai possède un afficheur de quai. Cet afficheur de quai utilise les mêmes informations que l’horaire complet. En utilisant un test conditionnel if
, affichez uniquement les trains qui partent du quai 4.
Exercice 10 : Simone et l’annonce vocale#
Il est possible de faire parler votre ordinateur. En important le module:
from os import system
et en appelant la fonction system(string)
où string
est une chaîne de caractère qui commence par say
, vous pouvez simuler les annonces en gare. Par exemple:
from os import system
train1 = ['S22', '8h47', 'Vufflens-la-Ville', 1]
annonce1 = 'say '+'Arrivée, sur voie '+str(train1[3])+', du train '+train1[0]+', à destination de '+train1[2]+'. Départ '+train1[1]
system(annonce1)
Annoncez les trains arrivant sur voie 4
Exercice 11 : Annonce vocale complète (avec jingle)#
Il est finalement possible de faire jouer le jingle des CFF avant l’annonce en important le module playsound
:
import playsound
puis de donner le chemin (le path) du fichier .mp3
à jouer :
playsound.playsound(path, True)
Pour faire cela, il vous faut télécharger sur votre ordinateur, au même emplacement que votre programme python les fichiers MP3 des jingles : version romande, version tessinoise et la version suisse-allemande. Attention à leur donner le bon nom !!!
Conseil Afin de jouer le jingle puis l’annonce, il faut placer un petit retard. Ceci est fait avec la fonction time.sleep(2.4)
qui fait dormir le programme pendant le jeu du jingle. Cette fonction provient du module sleep
import os
import pygame
import time
pygame.mixer.init()
pygame.mixer.music.load('sons/bahn_cff_f.mp3')
pygame.mixer.music.play()
time.sleep(2.5)
train1 = ['S22', '8h47', 'Vufflens-la-Ville', 1]
annonce1 = 'say '+'Voie '+str(train1[3])+', arrivée du train '+train1[0]+', à destination de '+train1[2]+'. Départ '+train1[1]
os.system(annonce1)
pygame 2.1.2 (SDL 2.0.16, Python 3.9.2)
Hello from the pygame community. https://www.pygame.org/contribute.html
sh: 1: say: not found
32512