Académique Documents
Professionnel Documents
Culture Documents
September 3, 2023
[23]: # Enfiler une file : Remplir une file, autrement, ajouter des éléments à la file
# On le fait en utilisant la méthode .append()
F.append(5)
F.append(17)
F.append(6)
[5, 17, 6]
[17, 6]
5
1.1.1 Exercice 1
1. Ecrire une fonction qui enfile une file et affiche son état actualisé ;
2. Ecrire une fonction qui défile une file et affiche l’élément quittant la file et l’état actualisé de
la file ;
3. Ecrire une fonction qui affiche le remplissage d’une file ;
4. Ecrire une fonction qui teste si une file est vide ou non, la fonction retourne True si la file est
vide et False sinon.
1
[26]: #1
def enfiler(file,element):
file.append(element)
print("file =",file)
[27]: #2
def defiler(file):
if file == []:
print("La file est vide")
else:
element = file.pop(0)
print(element,"quitte la file")
print("file =",file)
[28]: #3
def remplissage(F):
return len(F)
[29]: #4
def vide(F):
return F==[]
1.1.2 Exercice 2
Nous voulons modéliser une file d’attente dans un cabinet d’un médecin. Nous devons écrire un
programme qui à chaque fois demande à l’utilisateur (l’assistant du médecin) de saisir une tache
(Ajouter un nouveau patient à la file d’attente, Faire sortir un patient de la file d’attente, Fermer
le cabinet ce qui signifie l’arrêt du programme). A chaque fois ou l’assistant execute une tache le
programme affiche l’état de la file d’attente.
2
tache = lire_tache()
while tache != 3:
if tache == 1:
nom = input("Veuillez saisir le nom du patient : ")
enfiler(file_attente,nom)
else:
defiler(file_attente)
tache = lire_tache()
[45, 16]
39
1.2.1 Exercice 3
1. Ecrire une fonction qui permet d’empiler une pile ;
2. Ecrire une fonction qui permet de dépiler une pile ;
3. Ecrire une fonction qui affiche le remplissage d’une pile ;
4. Ecrire une fonction qui teste si une pile est vide ou non, la fonction retourne True si la pile
est vide et False sinon.
[34]: #1
def empiler(P,x):
P.append(x)
3
[35]: #2
def depiler(P):
if P!=[]:
x=P.pop()
return x
[36]: #3
def remplissage(P):
return len(P)
[37]: #4
def vide(P):
return P==[]
1.2.2 Exercice 4
Il s’agit de vérifier si une expression est bien parenthèsé.
Nous devons écrire un programme qui :
• Accepte les mots comme : (xxx),(xxx)(xx(xxx)x) ou (xx(xx(xxx)(xxx)xx)(xxx)xx)
• Rejette les mots comme : xx)xx(xx,(xx)x)xx(xx(xxx)xx ou (((xxx)x(xxx))))
Travail à faire :
Ecrire une fonction qui prend en paramètre une expression parenthèsés et retourne True s’elle est
acceptée et False si non. Utilisez une pile de caractères.
[39]: s="(abc(efg(hij))kl)"
parentheses(s)
[39]: True
[40]: p="(abc(ef)g(hij)(i))kl)"
parentheses(p)
4
[40]: False
1.2.3 Exercice 5
L’ordre dans la pile permet d’éviter l’usage des parenthèses. La notation postfixée (polonaise)
consiste à placer les opérandes devant l’opérateur. La notation infixée (parenthèsée) consiste à en-
tourer les opérateurs par leurs opérandes. Les parenthèses sont nécessaires uniquement en notation
infixée.
La notation postfixée est d’un emploi plus facile puisqu’on sait immédiatement combien d’opérandes
il faut rechercher.
Détaillons ici la saisie et l’évaluation d’une expression postfixée : La notation usuelle, comme (3 +
5) * 2, est dite infixée. Son défaut est de nécessiter l’utilisation de parenthèses pour éviter toute
ambiguïté (ici, avec 3 + (5 * 2)). Pour éviter le parenthésage, il est possible de transformer une
expression infixée en une expression postfixée en faisant “glisser” les opérateurs arithmétiques à la
suite des expressions auxquelles ils s’appliquent.
Exemples : - (3 + 5) * 2 s’écrira en notation postfixée (notation polonaise) : 3 5 + 2 - 3 + (5 2)
s’écrira: 3 5 2 * + - (A * B)/C En notation postfixe est: AB * C/ - Notation postfixe : 6 5 2 3 +
8 * + 3 + * En notation infixe est : (6 * ((5 + (2 + 3) * 8 ) + 3) )
Travail à faire : Ecrire une fonction qui prend en paramètre une expression arithmétique postfixée
sous forme de liste (les nombres en int et float et les opérateurs en chaîne de caractères) et retourne
le résultat du calcule.
Exemple : L’expression 3 5 + 2 * sera représenté par [3,5,“+”,2,“*”]
[42]: operation([3,5,"+",2,"*"])
[42]: 16