Prova 2: main() e calcule()

Prova 2: main() e calcule()

by José Coelho de Pina -
Number of replies: 0

Comentários?

 


OPERADORES = "+-*/"
ADD = "+"
SUB = "-"
MUL = "*"
DIV = "/"
FIM = "fim"
PROMPT = "Digite uma expressão com todos os termos separados por espaço [ou 'fim' para terminar]\n"

#-----------------------------------------------------------
def main():
    print("PROGRAMA PARA CÁLCULO DE EXPRESSÕES POLONESAS\n")
    expressao = input(PROMPT)
    while expressao != FIM:
        posfixa = expressao.split()
        print(posfixa, "=", calcule(posfixa),"\n")
        expressao = input(PROMPT)

#-----------------------------------------------------------        
def calcule( posfixa ):
    ''' (list) -> float

    Recebe um lista posfixa com strings representando uma expressão
    em notação polonesa e retorna o valor da expressão.

    Pré-condição: a função supõe que a expressão está correta.
    '''
    pilha = Pilha() # pilha de execução: contém apenas operandos (= números)
    for item in posfixa:
        if item in OPERADORES:
            valor_2 = pilha.desempilha()
            valor_1 = pilha.desempilha()
            if item == ADD:
                resultado = valor_1 + valor_2
            elif item == SUB:
                resultado = valor_1 - valor_2
            elif item == MUL:
                resultado = valor_1 * valor_2
            else: # item == DIV:
                resultado = valor_1 / valor_2
        else: # numero
            resultado = float(item)

        pilha.empilha(resultado)    

    return pilha.desempilha()