首页 > 其他 > 详细

module2-计算器

时间:2017-09-15 18:16:36      阅读:223      评论:0      收藏:0      [点我收藏+]
#!/usr/local/bin/python3
# -*- coding:utf-8 -*-
# AUTHOR:Howard hao
# a = ‘1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )‘
import re

def main():
    a = input(‘输入算式:‘)
    while ‘(‘ in a:
        print(‘a = ‘,a)
        b = re.search(‘\(([^()]+)\)‘,a).groups()[0]
        print(‘b = ‘,b)
        a = re.sub(‘\([^()]+\)‘,str(calculate(b)),a,1)
        print(‘替换后a = ‘,a)
    else:
        print(‘The result is‘,calculate(a))


#计算乘除加减(分步计算乘除)
def md(e):
    if ‘*‘ in e:
        E = re.split(‘\*‘, e,1)
        E1 = E[0].replace(‘ ‘,‘‘)
        E2 = E[1].replace(‘ ‘,‘‘)
        return float(E1)*float(E2)
    elif ‘/‘ in e:
        E = re.split(‘/‘, e,1)
        E1 = E[0].replace(‘ ‘, ‘‘)
        E2 = E[1].replace(‘ ‘, ‘‘)
        return float(E1)/float(E2)
    else:
        e = e.replace(‘ ‘, ‘‘).replace(‘++‘, ‘+‘).replace(‘+-‘, ‘-‘).replace(‘--‘,‘+‘)
        e = re.findall(‘[+-]?\d+\.?\d*‘, e)
        l = []
        for i in e:
            if ‘.‘ in i:
                l.append(float(i))
            else:
                l.append(int(i))
        else:
            return sum(l)

#截取一段计算传回md函数计算
def calculate(c):
    while ‘*‘ in c or ‘/‘ in c:
        print(‘c = ‘,c)
        d = re.search(‘\s*[+-]?\s*\d+\.?\d*\s*[*/]\s*[+-]?\s*\d+\.?\d*‘,c).group()
        print(‘d = ‘,d)
        # break
        c = re.sub(‘\s*[+-]?\s*\d+\.?\d*\s*[*/]\s*[+-]?\s*\d+\.?\d*‘,‘‘‘+‘‘‘ + str(md(d)),c,1)
        print(‘c = ‘,c)
    else:
        return md(c)
main()


本文出自 “ProgressEveryd” 博客,请务必保留此出处http://987774031.blog.51cto.com/11704329/1965540

module2-计算器

原文:http://987774031.blog.51cto.com/11704329/1965540

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!