#!/usr/bin/python
# -*- coding:utf8 -*-
# author:zlf
import
re,time
#
导入模块
in_str =
'8+3*(2*(16-3)+100/(10/2)+5)+(3+6*2)/3'
#
自定义一个字符串加减乘除表达式
def
base_calc(args):
"""
简易的计算器,主要使用正则练习去除括号
:param
args
为计算表达式,数字和数字之间为加减乘除符号对于本程序(括号两边的符号也不能省
略)
:return
:
返回计算结果并转化成字符串形式
"""
ret =
str
(
eval
(args))
#
使用
eval
处理表达式
return
ret
def
high_calc(inp):
"""
递归遍历去除括号
:param inp:
输入的复杂计算表达式
:return:
返回最终结果
"""""
sp_list=re.split(
'\(([\w\+\-\*\/\.]+)\)'
, inp,
1
)
#
利用正则表达式将最里面的一个括号筛选出
来
,
注意除法中的
'.'
点这个符号
while
len
(sp_list)==
3
:
#
如果存在括号则正则匹配结果长度为
3
sp_list[
1
]=base_calc(sp_list[
1
])
#
将匹配的结果进行处理并重新赋值替换
new_sp =
''
.join(sp_list)
#
将列表中的元素按字符串拼接成新的字符串表达式
(new_sp)
#
调试用
time.sleep(
1
)
#
调试用
high_calc(new_sp)
#
递归调用函数
break
#
递归结束不再递归则执行
break
,通过
break
跳出循环
res = base_calc(inp)
#
将最后的字符串表达式通过上面函数处理得到结果
return
res
#
将结果返回方便下次使用
if
__name__ ==
'__main__'
:
r=high_calc(in_str)
#
函数调用
(in_str+
'='
,r)
#
打印结果自定义格式输出
结果如图: