• python-24:四则计算器


    import re
    def input_check(): # 算式输入检测审
    while True:
    s=input('输入算式或退出(Q)--->>')
    # 1.除去空格
    s = s.replace(' ', '')
    if s[0]=='Q':
    exit('正常退出')
    # 2.检测是否含有非法字符,除数字、括号、+-*/以外的任何符号
    elif re.findall('[^d()-*/+.]', s):
    print('---->算式含有非法字符,重新输入或退出(Q)')
    continue
    # 3.检测左右括号是否匹配
    elif not s.count('(') == s.count(')'):
    print('---->算式括号不匹配,重新输入或退出(Q)')
    continue
    # 4.检测分母是否为0
    elif re.findall('/[+-]?d+.?d*', s):
    rz=re.findall('/[+-]?d+.d*', s)
    flag=False
    for i in rz:
    if float(i[1:-1])==0:
    print('---->算式分母为0,重新输入或退出(Q)')
    flag=True
    break
    if flag:
    continue
    #5.运算符号格式化
    s=format_symbol(s)
    return s

    def format_symbol(s): #符号检测,格式化
    s=re.sub('++|--','+',s)
    s=re.sub('+-|-+','-',s)
    s=re.sub('[+-*/]*','*',s)
    s=re.sub('[+-*/]/','/',s)
    return s

    def mul_div(s): # 计算单个乘除
    if '*' in s:
    a,b=s.split('*')
    t=float(a)*float(b)
    else:
    a,b=s.split('/')
    t=float(a)/float(b)
    return str(t)

    def add_sub(s): #计算只有加减运算的算式总和
    ls=re.findall('[+-]?d+.?d*',s)
    exp_sum=0
    for i in ls:
    exp_sum+=float(i)
    return str(exp_sum)

    def bracket(s): #先计算括号里算式
    while True:
    res=re.search('([^()]*)',s)
    if res:
    exp=res.group()
    val=mix_cal(exp)
    s=s.replace(exp,val)
    s=format_symbol(s)
    print('--->%s'%s)
    else:return s

    def mix_cal(s): #计算加减乘除混合运算'
    while True:
    res=re.search('d+.?d*[*/]-?d+.?d*',s)
    if res:
    exp=res.group()
    val=mul_div(exp)
    s=s.replace(exp,val)
    s=format_symbol(s) #乘除之后要判断一次符号
    else:
    return add_sub(s)

    def main():
    s='带符号的四则计算器'
    print(s.center(33,'*'))
    s=input_check()
    print('整理后的算式--->>%s'%s)
    print('分步计算:')
    exp=bracket(s) #除括号
    res=mix_cal(exp) #混合运算,返回最终结果
    if float(res)==eval(s):
    print('计算结果:%s'%res)
    else:
    print('计算错误')

    if __name__=='__main__':
    main()

    -------------------------------------------------------------------------------------------------------------
    -----------------------------------------------------------------------------------------------------------

    ************带符号的四则计算器************
    输入算式或退出(Q)--->>>1 - 2 * ( (60-30 +(-9-2-5-2*3-5/3-40*4/2-3/5+6*3) * (-9-2-5-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )
    整理后的算式--->>1-2*((60-30+(-9-2-5-2*3-5/3-40*4/2-3/5+6*3)*(-9-2-5-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))
    分步计算:
    --->1-2*((60-30-86.26666666666667*(-9-2-5-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))
    --->1-2*((60-30-86.26666666666667*173520.88095238098)-(-4*3)/(16-3*2))
    --->1-2*(-14969037.996825399-(-4*3)/(16-3*2))
    --->1-2*(-14969037.996825399+12.0/(16-3*2))
    --->1-2*(-14969037.996825399+12.0/10.0)
    --->1-2*-14969036.7968254
    计算结果:29938074.5936508





  • 相关阅读:
    实验5&期中考试后两题
    实验四——再探类
    实验3—初识类
    10.29算法训练——poj1475双重BFS
    10.25算法训练——裸线段树
    探索邻接表
    Hadoop学习之Combiner
    关于VLM模式下linux压缩根目录空间的心得
    C#微信公众号开发系列教程四(接收普通消息)
    c#分部类型详解
  • 原文地址:https://www.cnblogs.com/Zhouzg-2018/p/10245967.html
Copyright © 2020-2023  润新知