77-python-计算器练习(用到re模块)

import re
num = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'

def a_and_s(new_num):
new_num = new_num.replace('--','+')
new_num = new_num.replace('+-','-')
return new_num

def m_and_d(ret_num):
if '*' in ret_num:
a,b = ret_num.split('*')
ret_num = float(a) * float(b)
return str(ret_num)
if '/' in ret_num:
a,b = ret_num.split('/')
ret_num = float(a) / float(b)
return str(ret_num)

def screen_num(ret_num):
ret_num = ret_num.strip('()')
while True:
ret = re.search('\d+\.?\d*[*/]-?\d+\.?\d*', ret_num)
if ret: # 1-2*-1388335.8476190479
nice = ret.group()
new_num = m_and_d(nice)
print('new_num1:%s'%(new_num))
ret_num = ret_num.replace(nice, new_num)
ret_num = a_and_s(ret_num)
else:
size_num = re.findall('-?\d+\.?\d*', ret_num)
print('size_num:%s'%(size_num))
sums = 0
for i in size_num:
sums += float(i)
return str(sums)

def screen(num):
new_num = num.replace(' ','') # 1. 去空格
while True:
ret = re.search('\([^()]+\)', new_num)
if ret:
ret_num = ret.group()
careful = screen_num(ret_num)
new_num = new_num.replace(ret_num, careful)
print('new_num:%s'%(new_num))
else:
last_num = screen_num(new_num)
return last_num


result = screen(num)
print(result) # 2776672.6952380957
import re
num = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'

def a_and_s(new_num):
    new_num = new_num.replace('--','+')
    new_num = new_num.replace('+-','-')
    return new_num

def m_and_d(ret_num):
    if '*' in ret_num:
        a,b = ret_num.split('*')
        ret_num = float(a) * float(b)
        return str(ret_num)
    if '/' in ret_num:
        a,b = ret_num.split('/')
        ret_num = float(a) / float(b)
        return str(ret_num)

def screen_num(ret_num):
    ret_num = ret_num.strip('()')
    while True:
        ret = re.search('\d+\.?\d*[*/]-?\d+\.?\d*', ret_num)
        if ret: # 1-2*-1388335.8476190479
            nice = ret.group()
            new_num = m_and_d(nice)
            print('new_num1:%s'%(new_num))
            ret_num = ret_num.replace(nice, new_num)
            ret_num = a_and_s(ret_num)
        else:
            size_num = re.findall('-?\d+\.?\d*', ret_num)
            print('size_num:%s'%(size_num))
            sums = 0
            for i in size_num:
                sums += float(i)
            return str(sums)

def screen(num):
    new_num = num.replace(' ','')   # 1. 去空格
    while True:
        ret = re.search('\([^()]+\)', new_num)
        if ret:
            ret_num = ret.group()
            careful = screen_num(ret_num)
            new_num = new_num.replace(ret_num, careful)
            print('new_num:%s'%(new_num))
        else:
            last_num = screen_num(new_num)
            return last_num


result = screen(num)
print(result)       # 2776672.6952380957

  

posted @ 2018-11-06 20:13  _Q  阅读(169)  评论(0)    收藏  举报