TP1-PROG-09 - Les Files
Contents
TP1-PROG-09 - Les Files#
Les files sont des structures de données proches des listes. Elles permettent de gérer l’arrivé et le départ de ses éléments.
La file d’attente#
La file d’attente est une structure de donnée qui permet de gérer des entrées et des sorties dans un ordre précis : le premier élément ajouté est le dernier que l’on peut enlever. En anglais une file est connue sous le nom FIFO (First In First Out).
Les opérations d’une file sont :
créer une nouvelle file vide
ajouter un nouvel élément à la file
supprimer un élément de la file
Ajouter un élément#
Nous ajoutons un élément dans la file avec la fonction append()
Simulons une file d’attente à la caféteria.
Nous commençons avec une file vide.
file = []
C’est midi et les personnes commençent à arriver.
La fonction append()
permet de les ajouter à la liste file
.
file.append('Anna')
file.append('Tom')
file.append('Léa')
Nous avons maintenant les personnes suivantes dans la file d’attente.
print(file)
['Anna', 'Tom', 'Léa']
Enlever un élément#
La première personne à être servie, est enlevée de la liste avec la fonction pop(0)
.
En d’autres termes, les éléments sont
ajoutés à droite de la file (la liste)
supprimés à gauche : c’est le premier élément (d’index 0) qui est supprimé
file.pop(0)
'Anna'
La file est devenu plus petite.
print(file)
['Tom', 'Léa']
Des nouvelles personnes arrivent.
file.append('Jim')
file.append('Noa')
file.append('Elsa')
Une nouvelle personne est servie.
file.pop(0)
'Tom'
Combient de personne sont en attente ?
len(file)
4
Qui est dans la file d’attente
print(file)
['Léa', 'Jim', 'Noa', 'Elsa']
Exercice 1#
Utilisez la fonction pop()
pour enlever les personnes dans le bon ordre.
Exercice 2 : fonctions#
Il est possible de simplifier les deux primitives
ajouter un élément
enlever un élément
à l’aide d’une fonction (un sous-programme). Chaque fonction prendra comme argument une file. Cela permet
de pouvoir gérer plusieurs files en même temps
de s’affranchir de la notion d’index
A vous de définir les deux fonctions ayant les signatures suivantes :
def ajouter(file,element):
# Modifier la méthode suivante
file.extend(element)
def supprimer(file):
# modifier les méthodes suivantes
element = file[len(file)]
print("Element supprimé : ",element)
file.pop(1)
Que se passe-t-il si vous tentez de supprimer un élément dans une file vide ?
Modifiez la fonction supprimer(file)
pour qu’il gère une file vide
Exercice 3 : A la Migros#
Vous êtes maintenant capable de gérer plusieurs files indépendemment. Dans cet exercice, nous imaginons que nous voulons simuler le comportement des clients dans un magasin Migros où trois caisses sont ouvertes (et qu’il n’existe pas de système de self checking).
Déclarez trois files distinctes :
caisse1
,caisse2
,caisse3
Testez vos fonctions
ajouter(file, element)
etsupprimer(file
sur vos trois files avec des clients (à vous de choisir les prénoms)
Question subsidiaire : est-il possible de compter l’ensemble des clients qui sont passés ce jour-là dans votre magasin Migros ?
A la poste#
Nous allons maintenant simuler le système informatique de gestion de l’attente dans une poste.
Le client entre dans la poste
Il se dirige vers un distributeur de tickets
Le distributeur imprime un numéro
Lorsqu’un guichet est libre, l’employé se déclare libre et le système affiche la lettre du guichet au premier client de la file (en position 0)
Nous sommes à la Poste de Renens et il est 14h. Trois guichets sont ouverts A
, B
et C
, deux personnes attendent dans la file. La machine à tickets indique que le prochain ticket délivré sera le 544.
file = [542, 543]
Si une personne entre, elle prend son numéro et elle s’insére dans la liste d’attente. Le numéro suivant est le 544
file.append(544)
La file d’attente comprend maintenant:
print(file)
[542, 543, 544]
Deux nouveaux clients entrent et prennent un ticket.
file.append(545)
file.append(546)
print(file)
[542, 543, 544, 545, 546]
Simulation des guichets#
Il y a trois guichets A, B, et C, qui vont se libérer de façon alétoire. Le temps de libération dépend de l’opération postale du client.
Nous importons le module random
et utilisons la fonction choice()
pour choisir un des trois guichets de façon aléatoire.
import random
random.choice('ABC')
'C'
Le prochain guichet qui se libère
random.choice('ABC')
'C'
C’est la personne entrée en premier qui peut se diriger vers le guichet qui se libère
suivant = file.pop(0)
guichet = random.choice('ABC')
print(suivant, guichet)
542 A
Exercice 4#
Traduisez en python les étapes suivantes :
Une femme entre dans la poste, elle va chercher son ticket.
Deux guichets se libèrent.
Deux clients de la file les occupent.
Trois nouveaux clients entrent dans la poste et vont chercher leurs ticket.
Un guichet se libère
L’homme pressé quitte la poste, il en a marre d’attendre
Après ces étapes, quel est l’état de la file ?
Quel est le prochain numéro délivré par le distributeur ?
Conseil : utilisez les fonction ajouter(file, element)
et supprimer(file)
que vous avez défini à l’exercice 2