import re
# (5.12-2.74+0.24)*(3.15-2.0) + 1.12*4.09 를 postfix로 구현
lis = []
expression = "(5.12-2.74+0.24)*(3.15-2.0) + 1.12*4.09"
expression = re.sub('([\+\-\*\/\(\)])' , ' \g<1> ' , expression)
calc = expression.split()
for k in calc:
    if k == '(':
        lis.append(k)
    elif k == '+' or k == '-':
        if '*'in lis or '/' in lis or '+' in lis or '-' in lis:
            temp = lis.pop()
            if temp == '(' :
                lis.append(temp)
                lis.append(k)
            else:
                lis.append(temp)
                print(lis.pop(), end=" ")
                lis.append(k)
        else:
            lis.append(k)
    elif k == '*' or k == '/':
        if '*'in lis or '/' in lis:
            print(lis.pop(), end=" ")
            lis.append(k)
        else:
            lis.append(k)
    elif k == ')':
        while lis:
            t=lis.pop()
            if t == '(':
                continue
            else:
                print(t, end=" ")
    else:
        print(k, end=" ")
while lis:
    print(lis.pop(), end=" ")
 
print("\n")
 
#(5*(3+4)-5.12/2.33)-1.23*100)를 postfix로 구현
lis = []
expression = "(5*(3+4)-5.12/2.33)-1.23*100)"
expression = re.sub('([\+\-\*\/\(\)])' , ' \g<1> ' , expression)
calc = expression.split()
for k in calc:
    if k == '(':
        lis.append(k)
    elif k == '+' or k == '-':
        if '*'in lis or '/' in lis or '+' in lis or '-' in lis:
            temp = lis.pop()
            if temp == '(' :
                lis.append(temp)
                lis.append(k)
            else:
                lis.append(temp)
                print(lis.pop(), end=" ")
                lis.append(k)
        else:
            lis.append(k)
    elif k == '*' or k == '/':
        if '*'in lis or '/' in lis:
            print(lis.pop(), end=" ")
            lis.append(k)
        else:
            lis.append(k)
    elif k == ')':
        while lis:
            t=lis.pop()
            if t == '(':
                continue
            else:
                print(t, end=" ")
    else:
        print(k, end=" ")
while lis:
    print(lis.pop(), end=" ")
print("\n")
 
#postfix계산기 구현
lis = []
expression = input("계산식을 입력하시오 : ")
expression = re.sub('([\+\-\*\/\(\)])' , ' \g<1> ' , expression)
calc = expression.split()
for k in calc:
    if k == '(':
        lis.append(k)
    elif k == '+' or k == '-':
        if '*'in lis or '/' in lis or '+' in lis or '-' in lis:
            temp = lis.pop()
            if temp == '(' :
                lis.append(temp)
                lis.append(k)
            else:
                lis.append(temp)
                print(lis.pop(), end=" ")
                lis.append(k)
        else:
            lis.append(k)
    elif k == '*' or k == '/':
        if '*'in lis or '/' in lis:
            print(lis.pop(), end=" ")
            lis.append(k)
        else:
            lis.append(k)
    elif k == ')':
        while lis:
            t=lis.pop()
            if t == '(':
                continue
            else:
                print(t, end=" ")
    else:
        print(k, end=" ")
while lis:
    print(lis.pop(), end=" ")
 
    
        
cs


+ Recent posts