Infix à postfix de conversion en Python
J'ai commencé à la résolution de la Structure de Données des problèmes en Python. Je suis la mise en œuvre de infix à postfix, mais pas en mesure de corriger une erreur dans mon programme. La dernière instruction de retour où j'ai effectuer l'opération de jointure a d'entrée de type AUCUN.
Quand j'ai commencé le débogage, j'ai trouvé que dans cette partie de code, quelque chose se passe mal après la première opération push ( * ). Après que quand je fais de la pop() retourne NONE au lieu de retourner *. Quelqu'un peut s'il vous plaît signaler, qu'est-ce que l'erreur ici?
*else:
while (not s.isEmpty()) and (prec[s.peek()] >= prec[token]):
#print token
outlst.append(s.pop())
#print outlst
s.push(token)
print (s.peek())*
Infix à Postfix de conversion:
from StackClass import StackClass
def infixtopostfix(infixexpr):
s=StackClass()
outlst=[]
prec={}
prec['/']=3
prec['*']=3
prec['+']=2
prec['-']=2
prec['(']=1
oplst=['/','*','+','-']
tokenlst=infixexpr.split()
for token in tokenlst:
if token in 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' or token in '0123456789':
outlst.append(token)
elif token == '(':
s.push(token)
elif token == ')':
topToken=s.pop()
while topToken != '(':
outlst.append(topToken)
topToken=s.pop()
else:
while (not s.isEmpty()) and (prec[s.peek()] >= prec[token]):
#print token
outlst.append(s.pop())
#print outlst
s.push(token)
print (s.peek())
while not s.isEmpty():
opToken=s.pop()
outlst.append(opToken)
#print outlst
return outlst
#return " ".join(outlst)
print (infixtopostfix("A * B + C * D"))
OriginalL'auteur mrsan22 | 2014-12-21
Vous devez vous connecter pour publier un commentaire.
Votre code fonctionne pour moi, avec mon propre pile de mise en œuvre.
Je obtenir une sortie de
['A', 'B', '*', 'C', 'D', '*', '+']
.Je soupçonne que le problème pourrait être dans votre pile de mise en œuvre. À quoi cela ressemble?
Voici la mienne (sous-optimale j'en suis sûr!):
Heureux que vous avez trouvé l'erreur.
OriginalL'auteur Tony