文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python之简易计算器

2023-01-30 22:11

关注

  思路:学会运用正则表达式把需要先进行计算的匹配出来,然后再一步步的去算,把先算出来的值替换原来的值,再进一步的把++,--等号变成我们正常的数学上的符号,然后再进行一步步的替换,最终把带括号的都计算出来,再调用一次加减函数进行计算

import re

def atom_cal(exp):      #计算乘除法
    if "*" in exp:
        a,b = exp.split("*")    #以*作切割,把切出来的两个值分别赋给a,b
        return str(float(a) * float(b)) #用float计算ab相乘的值并转换成字符串格式,便于计算
    else:
        a,b = exp.split("/")    #以/作切割,把切出来的两个值分别赋给a,b
        return str(float(a) / float(b))

def mul_div(exp):   #乘除
    while 1:
        ret = re.search("\d+(\.\d+)?[*/]-?\d+(\.\d+)?",exp)     #把乘除法匹配出来
        if ret:
            atom_exp = ret.group()  #取第一个组匹配出来的乘除法
            res = atom_cal(atom_exp)    #调用atom_cal函数计算乘除法
            exp = exp.replace(atom_exp,res)     #替换  将计算出来的值与原式子替换
        else:return exp     #当没有相匹配的乘除法时,返回exp

def format_exp(exp):    #改变符号
    exp = exp.replace("--","+")
    exp = exp.replace("-+","-")
    exp = exp.replace("+-","-")
    exp = exp.replace("++","+")
    return exp

def add_sub(exp):   #计算加减
    ret = re.findall("[+-]?\d+(?:\.\d+)?",exp)  #把能加减的匹配出来,包括小数,负数等
    exp_sum = 0
    for i in ret:
        exp_sum += float(i)     #累加至exp_sum中返回
    return exp_sum

def cal(exp):
    exp = mul_div(exp)  #乘除
    exp = format_exp(exp) #变号
    exp_sum = add_sub(exp)  #加减
    return exp_sum      #float

def main(exp):
    exp = exp.replace(" ","")#去空格
    while 1:
        ret = re.search("\([^()]+\)",exp)    #括号最里面的数
        if ret:
            inner_bracket = ret.group()     #取正则表达式匹配到的第一个组数
            res = str(cal(inner_bracket))       #调用cal计算
            exp = exp.replace(inner_bracket,res)           #把算出来的值返回给括号
            exp = format_exp(exp)   #调用函数,变号
        else:break
    return cal(exp)
s = '1 - 2 * ( (60-30 +(-40/5) * (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 )) - (-4*3)/ (16-3*2) )'
print(main(s))

 

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯