• 函数加正则实现简单计算器


    本实现主要用到正则匹配的知识和函数的知识点完成一个能实现简单的加减乘除的计算器的运算

    import re
    
    #乘除运算
    def numl_mod(args):
        resurt  = re.compile('(d+.?d*)([*/])(-?d+.?d*)')#正则匹配,将匹配出来的结果赋给resurt
        while resurt.search(args):#while循环判断直到算出最终结果
            new_num = resurt.search(args)
            num = new_num.group()#取出原值赋给num
            num1 = float(new_num.group(1))
            num2 = new_num.group(2)#取出来的是 * / 号,在if 处进行判断
            num3 = float(new_num.group(3))
    
            if num2 == '*':
                result = num1 * num3#返回 * 的结果
            elif num2 == '/':
                result = num1 / num3#返回 / 的结果
            args = args.replace(num, str(result), 1)#将计算的结果替换返回
        return args
    # print(numl_mod("10*2/5"))
    
    # #加减运算
    def poor_add(args):
        resurt = re.compile('(-?d+.?d*)([-+])(-?d+.?d*)')
        while resurt.search(args):
            new_num = resurt.search(args)
            num = new_num.group()
            num1 = float(new_num.group(1))
            num2 = new_num.group(2)
            num3 = float(new_num.group(3))
            if num2 == '-':
                result = num1 - num3
            elif num2 == '+':
                result = num1 + num3
            args = args.replace(num, str(result), 1)
        return args
    
    # print(poor_add("3-5+6"))
    
    #检查判断去括号
    
    # origin = "1-2*((60-30+(-9-2-5-2*3-5/3-40*4/2-3/5+6*3)*(-9-2-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*25))"
    # origin = input("Enter number >>>>>")
    #检测式子的合法性
    def check(args):
        flag = True#默认标识位为真
        if re.findall("[a-zA-Z]",args):#检查式子的合法性,不能含有大小写字母
            print("error")
            flag = False
        return flag
    
    #检测运算
    def format(args):#检测式子,将 含有空格/++/+-/--等进行替换,返回一个新的式子
        new_args1 = args.replace("++", "+")
        new_args2 = new_args1.replace("+-", "-")
        new_args3 = new_args2.replace("--", "+")
        new_args4 = new_args3.replace("-+", "-")
        new_args5 = new_args4.replace(" ", "")
        new_args6 = new_args5.replace("*+","*")
        new_args = new_args6.replace("/+","/")
        return new_args
    
    print("--------------")
    print("欢迎使用计算机")
    print("--------------")
    #主代码块
    #执行语句块
    while True:
        choice = input("请选择 q/Q【退出】 y/Y 【执行】")
        if choice == "q" or choice == "Q":
            print("谢谢您的使用")
            break
        origin = input("Enter number >>>>>")
        if check(origin):
            new_origin = format(origin)
            while re.search("(",new_origin):#匹配如果有括号,执行下面代码
                new_new_origin = re.search("([^()]+)",new_origin).group()#匹配出最里面的括号里的式子
                # print(new_new_origin)
                s = numl_mod(new_new_origin)
                # print(s)
                s1 = poor_add(s)
                s2 = s1[1:-1]
                new_origin = new_origin.replace(new_new_origin, s2, 1)
                # print(new_origin)
                # print(s2, type(s2))
                # break
            else:#括号执行完后执行的代码块
                resurt = numl_mod(new_origin)
                # print(resurt, "resurt")
                # print(resurt)
                new_resurt = poor_add(resurt)
                # a2 = a2[1:-1]
                print(new_resurt)#返回的最终结果,也就是我们要得到的最终计算结果
    

      

  • 相关阅读:
    Jmeter性能测试--自己看到的博客收集
    python日志logging
    java学习day12--API-File文件流
    java学习day12--API-IO简介--流简介
    java学习day12--API-SimpleDateFormat--BigDecimal/BigInteger类
    java学习day12--API-包装类-Date类
    equals方法和 == 的使用
    java学习day11--API--Object类-String类-StringBuilder类
    构造方法和普通方法的区别
    java中的修饰符总结
  • 原文地址:https://www.cnblogs.com/flash55/p/5874717.html
Copyright © 2020-2023  润新知