TP1-PROG-08 - Tableaux
Contents
TP1-PROG-08 - 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
Tableau 1D : les listes#
En Python, on décrit une liste avec les éléments qui le composent. Ces éléments sont des variables qui peuvent être de n’importe quel type.
Une liste est caractérisée par :
est délimitée par des crochets
[]
, etses éléments sont séparés par une virgule
,
Création d’une liste vide#
# Création d'une liste vide
uneListe = []
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 premier élément avec :
uneListe[0]
# On imprime le premier élément :
print(uneListe[0])
une chaîne de caractères
# On imprime le second élément :
print(uneListe[1])
4
# On imprime le troisième élément :
print(uneListe[2])
3.14
Longueur d’une liste#
La fonction len(list)
retourne la longueur de la liste list
len(uneListe)
3
Ajout d’un élément à la liste#
Pour ajouter un nouvel élément à la liste, il existe deux façon :
pour ajouter un élément à la fin de la liste on utilise la méthode (c’est comme une fonction)
uneListe.append()
pour ajouter un élément
element
à la positioni
, 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' à la position 2 (soit entre 4 et 3.14)
uneListe.insert(2,0.618)
# Afficher la liste une seconde fois
print(uneListe)
['une chaîne de caractères', 4, 3.14, 'salut']
['une chaîne de caractères', 4, 0.618, 3.14, 'salut']
Modification d’un élément de la liste#
On peut modifier un élément en y accédant à l’aide de l’indice i
## Modification de 3.14 en 6.28
uneListe[3] = 6.18
# Affichage de la liste
print(uneListe)
['une chaîne de caractères', 4, 0.618, 6.18, 'salut']
Enlever des éléments d’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(0.618)
# Affichage de la liste
print(uneListe)
['une chaîne de caractères', 4, 6.18, 'salut']
# Suppression du dernier élément
uneListe.pop()
# Affichage de la liste
print(uneListe)
['une chaîne de caractères', 4, 6.18]
# Effacement de tous les éléments de la liste
uneListe.clear()
# Affichage de la liste vide
print(uneListe)
[]
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 est donc une liste 1D
L’horaire affiché est donc une liste de listes 1D, à savoir un tableau en deux dimensions.
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.
Création de l’horaire#
L’horaire est constitué d’une liste de listes 1D.
Chaque train
est une liste 1D 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
Exercice 2 : Création de l’horaire#
L’horaire est un tableau en 2 dimensions donc une liste de listes.
# Création de l'horaire avec les trois trains
horaire = [train1, train2, train3]
horaire
[['S22', '8h47', 'Vufflens-la-Ville', 1],
['S2', '8h51', 'Aigle', 4],
['S4', '8h55', 'Palézieux', 3]]
Exercice 3 : ajout d’un train à l’horaire#
Créez l’horaire avec les 4 trains train1
, train2
, train3
, train4
Accèder aux éléments de l’horaire (les trains)#
Avec une liste de liste, il faut donner deux indices. Le premier correspond à un élément de l’horaire.
# Affichage du train2 (S2 de 8h51 en direction d'Aigle sur voie 4)
print(horaire[1])
['S2', '8h51', 'Aigle', 4]
Le second indice correspond à un élément à l’intérieur de la liste définie. Ainsi, pour obtenir uniquement l’heure, on choisira le second élément de la liste.
# Affichage de la destination du train 2:
print(horaire[1][2])
Aigle
On accède de même aux éléments de la ligne horaire[1]
L’élément horaire[1][2]
correspond au troisième élément de la liste horaire[1]
, donc la destination
horaire[1][2]
'Aigle'
Exercice 3 : accéder à un élément dans le tableau d’affichage#
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
Accéder à une plage#
On peut accéder à une plage d’éléments. La plage entre le premier et le deuxième élément s’écrit horaire[0:2]
horaire[0:2]
[['S22', '8h47', 'Vufflens-la-Ville', 1], ['S2', '8h51', 'Aigle', 4]]
Avec une boucle for
nous pouvons itérer sur la liste et afficher les trains ligne par ligne.
for train in horaire[0:2]:
print(train)
['S22', '8h47', 'Vufflens-la-Ville', 1]
['S2', '8h51', 'Aigle', 4]
Exercice 4 : Affichage d’une plage de l’horaire#
Affichez les lignes 3-4 de l’horaire.
Remarque : il existe une seconde possibilité en utilisant une boucle for i in range(4)
Ajouter un nouveau train à l’horaire#
Rappel : on ajoute une nouvelle ligne à la fin avec la fonction list.append()
:
# Création d'un nouveau train
train5 = ['RE', '8h58', 'Annemasse', 2]
# Ajout de ce train à l'horaire
horaire.append(train5)
# Affichage de l'horaire
for train in horaire:
print(train)
['S22', '8h47', 'Vufflens-la-Ville', 1]
['S2', '8h51', 'Aigle', 4]
['S4', '8h55', 'Palézieux', 3]
['RE', '8h58', 'Annemasse', 2]
On peut ajouter une nouvelle ligne à la position i
avec la fonction list.insert(i, element)
train6 = ['S1', '8h57', 'Lausanne', 4]
horaire.insert(3, train6)
for train in horaire:
print(train)
['S22', '8h47', 'Vufflens-la-Ville', 1]
['S2', '8h51', 'Aigle', 4]
['S4', '8h55', 'Palézieux', 3]
['S1', '8h57', 'Lausanne', 4]
['RE', '8h58', 'Annemasse', 2]
Modification des informations#
En cet hiver difficile, la ligne de contact souffre. Le train S4 pour Palézieux aura 30 minutes de retard. Il faut modifier l’entrée et ajouter l’information
## Modification de l'horaire du S4
horaire[2][1] = '8h55 + 30min'
## Ajout de l'information
horaire[2].append('Problème sur la ligne de contact')
## Affichage de l'horaire
for train in horaire:
print(train)
['S22', '8h47', 'Vufflens-la-Ville', 1]
['S2', '8h51', 'Aigle', 4]
['S4', '8h55 + 30min', 'Palézieux', 3, 'Problème sur la ligne de contact']
['S1', '8h57', 'Lausanne', 4]
['RE', '8h58', 'Annemasse', 2]
Suppression de train#
A mesure que le temps passe, les trains entrent en gare, prennent des voyageurs et en laissent descendre d’autres, puis repartent verts leurs destinations. Il faut donc les supprimer de l’horaire
Rappel:
list.remove(x)
si l’élémentx
existelist.pop()
le dernier élémentlist.clear()
tous les éléments
On enlève l’élément train5
:
# Suppression du train numéro 5
horaire.remove(train5)
# Affichage de l'horaire
for train in horaire:
print(train)
['S22', '8h47', 'Vufflens-la-Ville', 1]
['S2', '8h51', 'Aigle', 4]
['S4', '8h55 + 30min', 'Palézieux', 3, 'Problème sur la ligne de contact']
['S1', '8h57', 'Lausanne', 4]
# Suppression du dernier train
horaire.pop()
# affichage de l'horaire
for train in horaire:
print(train)
['S22', '8h47', 'Vufflens-la-Ville', 1]
['S2', '8h51', 'Aigle', 4]
['S4', '8h55 + 30min', 'Palézieux', 3, 'Problème sur la ligne de contact']
# Effacement de tous les trains. Nous sommes en fin de service
horaire.clear()
# Affichage de l'horaire
for train in horaire:
print(train)
Exercice 5#
Voici votre horaire de départ.
# Création des trains
train1 = ['S22', '8h47', 'Vufflens-la-Ville', 1]
train2 = ['S2', '8h51', 'Aigle', 4]
train3 = ['S4', '8h55', 'Palézieux', 3]
train4 = ['S1', '8h57', 'Lausanne', 4]
train5 = ['RE','8h58','Annemasse',2]
horaire = [train1, train2, train3, train4, train5]
# Affichage de l'horaire
for train in horaire:
print(train)
['S22', '8h47', 'Vufflens-la-Ville', 1]
['S2', '8h51', 'Aigle', 4]
['S4', '8h55', 'Palézieux', 3]
['S1', '8h57', 'Lausanne', 4]
['RE', '8h58', 'Annemasse', 2]
Ajoutez à l’horaire le régional S1 pour Bussigny qui part à 9h01 sur voie 1
Il est 8h50, le régional S22 pour Bussigny et Vufflens-la-Ville est parti. Supprimez-le de l’horaire
Un problème sur la ligne entre Vevey et Lausanne provoque un retard de 20 minutes. Ajoutez cette information pour le RE de 8h58 pour Annemasse
Exercice 6 (Affichage des 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, affichez uniquement les trains qui partent du quai 4.
Exercice 7 (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 8 : 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