# split expression
def mixed_operation (exp):
exp_list = list(exp)
temp = ''
behavor_list = []
i = 0
length = len(exp_list)
for item in exp_list:
if is_operation(item):
behavor_list.append(int(temp))
behavor_list.append(item)
temp = ''
else:
temp += item
if i == length - 1:
behavor_list.append(int(temp))
break;
i += 1
return behavor_list# Calculation op1 and op2('*' and '/' or '+' and '-')
def cal_op1_op2(exp_list, op1, op2):
if len(exp_list) == 1:
return exp_list
i = 0
has_op = False
for i in range(2, len(exp_list), 2):
a = exp_list[i - 2]
o = exp_list[i - 1]
b = exp_list[i]
if o == op1 or o == op2:
has_op = True
exp_list[i - 2] = get_aob(a, o, b)
del exp_list[i]
del exp_list[i - 1]
break
if has_op == False:
return exp_list
return cal_op1_op2(exp_list, op1, op2)#!/usr/bin/env python
'expression_cal.py -- cal the expression that you give to me'
# judgment a char is a operation or not
def is_operation(oper):
if oper == '+' or oper == '-' or oper == '*' or oper == '/':
return True
else:
return False
# split expression
def mixed_operation (exp):
exp_list = list(exp)
temp = ''
behavor_list = []
i = 0
length = len(exp_list)
for item in exp_list:
if is_operation(item):
behavor_list.append(int(temp))
behavor_list.append(item)
temp = ''
else:
temp += item
if i == length - 1:
behavor_list.append(int(temp))
break;
i += 1
return behavor_list
# cal a o b
def get_aob(a, o, b):
if o == '+':
return a + b
elif o == '-':
return a - b
elif o == '*':
return a * b
elif o == '/':
return a / b
# Calculation op1 and op2('*' and '/' or '+' and '-')
def cal_op1_op2(exp_list, op1, op2):
if len(exp_list) == 1:
return exp_list
i = 0
has_op = False
for i in range(2, len(exp_list), 2):
a = exp_list[i - 2]
o = exp_list[i - 1]
b = exp_list[i]
if o == op1 or o == op2:
has_op = True
exp_list[i - 2] = get_aob(a, o, b)
del exp_list[i]
del exp_list[i - 1]
break
if has_op == False:
return exp_list
return cal_op1_op2(exp_list, op1, op2)
# cal exp
def cal_exp(exp_list):
exp_list = cal_op1_op2(exp_list, '*', '/')
exp_list = cal_op1_op2(exp_list, '+', '-')
return exp_list[0]
while True:
expre = raw_input('Enter your expression(0 to end):\n')
if expre == '0':
break
result = mixed_operation(expre)
print 'list result = ',
print result
print cal_exp(result)
print 'END'原文地址:http://blog.csdn.net/lemon_tree12138/article/details/44959815