Écrire la fonction
est_operateur(c: str)
qui prend en entrée un caractère et renvoieTrue
s'il s'agit d'un opérateur,False
sinon. On peut avoir besoin de la fonctionc.isdigit()
(attention, ne fonctionne que sur desstr
).
def est_operateur(c: str):
return c=='+' or c=='-' or c=='*' or c=='/'
Écrire la fonction
calcul(op: str, a: int, b: int)
qui prend en paramètre un opérateurop
parmis les 4 autorisés, et deux entiersa
etb
. Elle renvoie le résultat du calcula op b
.
def calcul(op: str, a: int, b: int):
if op == '+':
return a + b
elif op == '-':
return a - b
elif op == '*':
return a * b
else:
return a / b
Écrire la fonction
evaluation(expr: list)
qui prend en paramètre une expression sous la forme d'un tableau de caractère correspondant à une formule en NPI. Elle renvoie le résultat du calcul de l'expression.
def evaluation(expr: list | str): # ça marche avec des str également!
pile = pile_creer()
for c in expr:
if c.isdigit():
pile_empiler(pile, int(c))
elif est_operateur(c):
a = pile_depiler(pile)
b = pile_depiler(pile)
resultat = calcul(c, a, b)
pile_empiler(pile, resultat)
return pile_sommet(pile)
Réécrire les fonctions correspondants aux primitives de pile en stockant les éléments dans un tableau python. Ci-dessous des indications pour "traduire" un tableau en pile.
def pile_creer():
return []
def pile_taille(pile):
return len(pile)
def pile_est_vide(pile):
return pile_taille(pile) == 0
def pile_empiler(pile, element):
pile.append(element)
def pile_depiler(pile):
return pile.pop()
def pile_sommet(pile):
return pile[-1]