计算器

Posted jiadi321

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了计算器相关的知识,希望对你有一定的参考价值。

eval 不能直接计算数字表达式
去掉s中的所有空格
写正则表达式 把内部不再有括号的表达式提取出来
写正则表达式 把a*b或者a/b这样的表达式从左到右依次匹配出来
写正则表达式 把加减法匹配出来
能够级匹配整数表达式 也匹配小数表达式

如果 你已经拿到一个 a+b 或者 a*b
写一个函数,计算这样表达式的结果
‘1+5‘
‘1.345+2.567‘
s = ‘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
s = 1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )
s = s.replace( ,‘‘)

def mul_di(num):
    if / in num:
        a,b = num.split(/)
        return str(float(a)/float(b))
    elif * in num:
        a,b = num.split(*)
        return str(float(a)*float(b))

def mul_div(num):
    while True:
        mu = re.search(d+(.d+)?[*/]-?d+(.d+)?,num)
        if mu:
            mul = mu.group()
            mun = mul_di(mul)
            num = num.replace(mul,mun)
        else:break
    return num

def cha_sym(num):
    num = num.replace(++,+)
    num = num.replace(+-,-)
    num = num.replace(-+,-)
    num = num.replace(--,-)
    return num
def add_sub(num):
    nu = re.findall([+-]?d+(?:.d+)?, num)
    count = 0
    for i in nu:
        count += float(i)
    return str(count)
def no_sp(num):
    while True:
        nu = re.search(([^()]+),num)
        if nu:
            ret = nu.group()
            Value = mul_div(ret)
            Value = cha_sym(Value)
            new_Value = add_sub(Value)
            num = num.replace(ret,new_Value)
        else:break
    ret = mul_div(num)
    Value = cha_sym(ret)
    return add_sub(Value)
print(no_sp(s))

 












以上是关于计算器的主要内容,如果未能解决你的问题,请参考以下文章

从JVM的角度看JAVA代码--代码优化

Vue3官网-高级指南(十七)响应式计算`computed`和侦听`watchEffect`(onTrackonTriggeronInvalidate副作用的刷新时机`watch` pre)(代码片段

golang代码片段(摘抄)

10个JavaScript代码片段,使你更加容易前端开发。

10个JavaScript代码片段,使你更加容易前端开发。

如何在 python 中并行化以下代码片段?