首页 > 代码库 > 实现计算器

实现计算器

作业要求:

开发一个简单的python计算器

  1. 实现加减乘除及拓号优先级解析
  2. 用户输入 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )等类似公式后,必须自己解析里面的(),+,-,*,/符号和公式(不能调用eval等类似功能偷懒实现),运算后得出结果,结果必须与真实的计算器所得出的结果一致

 

 

import re

def clear(Re,res1):
    Re=re.sub([()],‘‘,Re)
    res= re.sub(\([^()]+\),Re,res1,1)
    res= re.sub("\+\+|--", "+", res)
    res= re.sub("\+-|-\+", "-", res)
    return res

def muldiv(res):
    while re.search(-?\d+\.?\d*[\*\/]-?\d+\.?\d*,res):
        Re=re.search(-?\d+\.?\d*[\*\/]-?\d+\.?\d*,res).group()
        if re.search(-?\d+\.?\d*\*-?\d+\.?\d*,Re):
            m,n=re.split(\*,Re)
            total=float(m)*float(n)
            if re.search(-\d+\.?\d*\*-\d+\.?\d*,res):
                res = re.sub("-?\d+\.?\d*\*-?\d+\.?\d*",("+"+str(total)),res,1)
                return muldiv(res)
            else:
                res=re.sub(-?\d+\.?\d*\*-?\d+\.?\d*,str(total),res,1)
                return muldiv(res)
        if re.search(-?\d+\.?\d*\/-?\d+\.?\d*, Re):
            m,n=re.split(\/,Re)
            total=float(m)/float(n)
            res=re.sub(-?\d+\.?\d*\/-?\d+\.?\d*,str(total),res,1)
            return muldiv(res)
    return res

def addsub(res):
    while re.search(-?\d+\.?\d*[\+\-]-?\d+\.?\d*,res):
        Re=re.search(-?\d+\.?\d*[\+\-]-?\d+\.?\d*,res).group()
        if re.search(-?\d+\.?\d*\+-?\d+\.?\d*,Re):
            m,n=re.split(\+,Re)
            total=float(m)+float(n)
            res=re.sub(-?\d+\.?\d*\+-?\d+\.?\d*,str(total),res,1)
            return  addsub(res)
        if re.search(-?\d+\.?\d*\--?\d+\.?\d*,Re):
            m, n = re.split(\-, Re)
            total = float(m) - float(n)
            res = re.sub(-?\d+\.?\d*\--?\d+\.?\d*, str(total), res, 1)
            return addsub(res)
    return res

def count(res):
    while re.search(\([^()]+\),res):
        Re= re.search(\([^()]+\),res).group()
        Re1=muldiv(Re)
        Re2=addsub(Re1)
        Clear=clear(Re2, res)
        return count(Clear)
    else:
        Re1 = muldiv(res)
        Re2 = addsub(Re1)
        return Re2
s=input(请输入想计算的内容:)
s=re.sub( ,‘‘,s)
print(count(s))

 

实现计算器