Problème — Évaluation d'une expression en notation postfixée
Application directe du cours · niveau 2 · NSI (terminale), chapitre 1 — Structures de données linéaires
Énoncé
Problème — Évaluation d'une expression en notation postfixée.
La notation postfixée (ou polonaise inverse) écrit les opérateurs après leurs opérandes : par exemple "3 4 + 5 *" signifie . Écrire une fonction evaluer_postfixe(expr) qui évalue une telle expression à l'aide d'une pile.
Corrigé
On parcourt les jetons (tokens). Un nombre est empilé ; un opérateur dépile ses deux opérandes, calcule, et empile le résultat. À la fin, la pile contient l'unique valeur du résultat.
def evaluer_postfixe(expr):
pile = []
for jeton in expr.split(): # decoupe selon les espaces
if jeton in ("+", "-", "*", "/"):
droite = pile.pop() # second operande
gauche = pile.pop() # premier operande
if jeton == "+":
pile.append(gauche + droite)
elif jeton == "-":
pile.append(gauche - droite)
elif jeton == "*":
pile.append(gauche * droite)
else:
pile.append(gauche / droite)
else:
pile.append(float(jeton)) # un nombre : on empile
return pile.pop() # resultat final
# Tests
print(evaluer_postfixe("3 4 + 5 *")) # 35.0
print(evaluer_postfixe("10 2 / 3 -")) # 2.0
La pile mémorise les résultats intermédiaires, exactement comme la pile d'exécution d'un calcul. L'expression étant parcourue une fois et chaque opération de pile coûtant , le coût total est , où est le nombre de jetons.
Les autres exercices de ce chapitre Le cours du chapitre
Un blocage sur cet exercice ? Le tuteur d'Adloun guide par questions, sans donner la réponse.