## Correction Pile / Fichiers (Extrait CNC 2015)
## Question 1 :
# l'interet d'utiliser l'écriture post-fixée est de pouvoir ecrire une expression mathématique
sans utiliser les parenthèses
## Question 2 :
def estVide(pile):
if pile ==[]:
return True
return False
## Question 3 :
def empiler(pile,elem):
[Link](0,elem)
## Question 4 :
def depiler(pile):
return [Link](0)
## Question 5 :
def valeurSommet(pile):
print(pile[0])
## Question 6 :
# Version 1 (itérative):
def estEntier(expr) :
n = len(expr)
for i in range(n) :
if expr[i] <'0' or expr[i]>'9' :
return False
return True
# Version 2 (récursive):
def estEntier(expr) :
if expr=='' :
return True
if expr[0] <'0' or expr[0]>'9' :
return False
else :
return estEntier(expr[1:])
## Question 7 :
def eval(op,e1,e2):
assert estEntier(e1) == True and estEntier(e2) == True
assert op in ['+','-','*','/']
e1 = int(e1)
e2 = int(e2)
if op=='+':
return e1 + e2
elif op=='-':
return e1 - e2
elif op=='*':
return e1 * e2
else:
if e2 != 0 :
return e1/e2
else :
return None
## Question 8 :
def evalue(expr):
pile = []
for i in expr:
# Si expr[i] est un entier on l'empile
if estEntier(i)==True:
empiler(pile,i)
#sinon on depile deux valeurs, on applique l'opérateur et on empile le resultat
else:
e1=depiler(pile)
e2=depiler(pile)
e3=eval(i,e1,e2)
empiler(pile,str(e3))
return int(depiler(pile))
print(evalue(['3','6','+','7','-']))