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 |
'파이썬으로 구현한 알고리즘' 카테고리의 다른 글
다양한 빅오의 피보나치 구현하기 (0) | 2017.12.27 |
---|---|
Iterative 거듭제곱 구현하기 (0) | 2017.12.27 |
Regular Expression으로 전화번호 Search 구현하기 (0) | 2017.11.16 |
Nested tree를 tree로 만들고 left child right sibling구조로 변환 구현하기 (0) | 2017.11.16 |
Boyer-Moore Algorithm 구현하기 (0) | 2017.11.11 |