mirror of
https://github.com/Fare-spec/cours.git
synced 2025-12-09 11:30:38 +00:00
tried to add dijkstra implementation
This commit is contained in:
44
tp6_enirely/tp6_self/npi.py
Normal file
44
tp6_enirely/tp6_self/npi.py
Normal file
@@ -0,0 +1,44 @@
|
||||
def npi(exp: str) -> float:
|
||||
"""Calcule une expression arithmétique en NPI (notation polonaise inverse).
|
||||
|
||||
Args:
|
||||
exp (str): L'expression arithmétique à calculer.
|
||||
|
||||
Returns:
|
||||
float: Le résultat de l'expression.
|
||||
"""
|
||||
assert exp, "L'expression est vide."
|
||||
pile = []
|
||||
|
||||
for token in exp.split():
|
||||
if token in "+-*/":
|
||||
if len(pile) < 2:
|
||||
print("Erreure : Pas assez d'opérandes.")
|
||||
return None
|
||||
|
||||
b, a = pile.pop(), pile.pop()
|
||||
match token:
|
||||
case '+': pile.append(a + b)
|
||||
case '-': pile.append(a - b)
|
||||
case '*': pile.append(a * b)
|
||||
case '/':
|
||||
if b == 0:
|
||||
print("Erreur : Division par zéro.")
|
||||
return None
|
||||
pile.append(a / b)
|
||||
elif token.replace('.', '', 1).isdigit(): # isdigit verifie si 'token' est un nombre ou un chiffre
|
||||
pile.append(float(token))
|
||||
else:
|
||||
print(f"erreur : '{token}' n'est pas un opérande valide.")
|
||||
return None
|
||||
|
||||
if len(pile) != 1:
|
||||
print("erreur : Expression mal formée.")
|
||||
return None
|
||||
|
||||
return pile[0] # On aurait pu mettre pile[-1]
|
||||
|
||||
if __name__ == "__main__":
|
||||
# Test
|
||||
exp = "3 4 + 5 * 2 /" # correspond a (3+4)(5/2) soit 7 * 2.5 = 17.5
|
||||
print(npi(exp))
|
||||
Reference in New Issue
Block a user