eval()을 사용해보자
후위표현식 AB+를 A+B로 변환해서 산술연산하는 함수를 만들자.
def postfix_eval(expr):
operand_stack = []
token_list = postfix_expr.split()
for token in token_list:
if token in '0123456789':
operand_stack.append(int(token))
else:
operand2 = operand_stack.pop()
operand1 = operand_stack.pop()
result = do_math(token, operand1, operand2)
operand_stack.append(result)
return operand_stack.pop()
def do_math(op, op1, op2):
if op == "*":
return op1 * op2
elif op == "/":
return op1 / op2
elif op == '+':
return op1 + op2
else:
return op1 - op2
실행
print(postfix_eval('7 8 + 3 2 + /'))
여기서 주목할 것은 do_math 여기 do_math의 내용을 이렇게 바꾼다면
def post_math(op, op1, op2):
return eval(op1 + op + op2)
테스트를 해보자.
post_math('+', '1', '2')
3
문자열을 그대로 맘대로 합쳐서 그 문자열 자체를 평가이런 것에 대한 엄청난 효과를 볼 수 있는 것은 리스프 형태일 것 같다.
다음엔 python 리스트 형태 언어인 hy로도 조금씩 적어봐야겠다.
댓글 없음:
댓글 쓰기