正则与计算器

import re

def repeat_func(s):
    #去掉重复的+——号
    repeat = re.findall(‘\+\-|\-\-|\++\-\+‘, s)
    if len(repeat) > 0:
        for i in repeat:
            if i == ‘--‘ or i == ‘++‘:
                s = s.replace(i, ‘+‘)
            if i == ‘+-‘ or s == ‘-+‘:
                s = s.replace(i, ‘-‘)
    return s

def mul_devid(content):
    # 计算乘除
    pattern1 = ‘-?\d+\.?\d*(?:\*|\/)-?\d+\.?\d*‘
    while 1:
        first = re.search(pattern1, content)
        #匹配乘除
        if first:
            if ‘*‘ in first.group():
                new1 = first.group().split(‘*‘)
                new = float(new1[0]) * float(new1[1])
                new = str(new)
            else:
                new1 = first.group().split(‘/‘)
                new = float(new1[0]) / float(new1[1])
                new = str(new)

            res=re.search(r‘-\d+\.?\d*(?:\*|\/)-\d+\.?\d*‘,content)
            #如果两个负数相乘或相除,添加正号
            if res :
                new=‘+‘ + new
            content = repeat_func(content)
            content = content.replace(first.group(), new)

        else:
            break
    return content

def add_minus(content):
    # 计算加减
    pattern2 = ‘-?\d+\.?\d*(?:\+|\-)\d+\.?\d*‘
    while 1:
        first = re.search(pattern2, content)
        if first:
            #根据不同的模式分别计算
            choice1 = re.search(‘(-\d+\.?\d*-\d+\.?\d*)‘, first.group())
            if choice1:
                new1 = first.group().split(‘-‘)
                new = -(float(new1[1]) + float(new1[2]))

            choice2 = re.search(‘(-\d+\.?\d*\+\d+\.?\d*)|(\d+\.?\d*\+\d+\.?\d*)‘, first.group())
            if choice2:
                new1 = first.group().split(‘+‘)
                new = float(new1[1]) + float(new1[0])

            choice3 =  re.search(‘\d+\.?\d*-\d+\.?\d*‘, first.group())
            if choice3:
                new1 = first.group().split(‘-‘)
                new = float(new1[0]) - float(new1[1])
            #
            # content=repeat_func(content)
            content = content.replace(first.group(), str(new))

        else:
            break

    return content

def calculate(content):
    content = mul_devid(content)
    content = add_minus(content)
    return content

def bracket(s):
    while 1:
        first = re.search(r‘\([^()]+\)‘, s)
        if first:
            new=calculate(first.group())
            s=s.replace(first.group(),new[1:-1])
            s=repeat_func(s)
        else: break
    end=calculate(s)
    return end

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(eval(s))
print(bracket(s))
时间: 2024-12-28 21:26:20

正则与计算器的相关文章

Python 正则实现计算器

1 1 # !/usr/bin/env/ python3 2 2 # -*- coding: utf-8 -*- 3 3 4 4 """用户输入计算表达式,显示计算结果""" 5 5 6 6 __author__ = 'Jack' 7 7 8 8 import re 9 9 10 10 bracket = re.compile(r'\([^()]+\)') # 寻找最内层括号规则 11 11 mul = re.compile(r'(\d+\.?\

python3 运用正则实现计算器

import re bracket = re.compile(r'\([^()]+\)') # 寻找最内层括号规则 mul = re.compile(r'(\d+\.?\d*\*-\d+\.?\d*)|(\d+\.?\d*\*\d+\.?\d*)') # 寻找乘法运算规则 div = re.compile(r'(\d+\.?\d*/-\d+\.?\d*)|(\d+\.?\d*/\d+\.?\d*)') # 寻找除法运算规则 add = re.compile(r'(-?\d+\.?\d*\+-\d

Python基础(递归、模块、包以及正则)-day05

写在前面 上课第四天,打卡: 如果再见不能红着眼,是否还能红着脸: 一.协程函数(生成器:yield的表达式形式) 1.yield 的语句形式: yield 1 2.yield 的表达式形式: x=yield 注意:next(g) #等同于 g.send(None),示例如下: 1 def deco(func): 2 def wrapper(*args,**kwargs): 3 res=func(*args,**kwargs) 4 next(res) 5 return res 6 return

python之路 目录

目录 python_基础总结1 python由来 字符编码 注释 pyc文件 python变量 导入模块 获取用户输入 流程控制if while python 基础2 编码转换 pycharm 配置 运算符 基本数据类型int str list tupple dict for循环 enumerate序列方法 range和xrange python基础3 集合 三元运算 深浅拷贝 函数 python基础4 函数参数引用 python内置函数 filter map open处理文件 python 基

Python 系统学习梳理_【All】

Python学习 1. Python学习---Python安装与基础1205 2. Python学习---PyCharm的使用学习 3. Python学习---Python数据类型1206 4. Python学习---range/for/break/continue简单使用 5. Python学习---列表/元组/字典/字符串/set集合/深浅拷贝1207[all] 6. Python学习---文件操作的学习1208 7. Python学习---函数的学习1209[all] 8. Python学

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

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

正则计算器2

1 import sys 2 import re 3 4 def deal_fuhao(calc_list): 5 new_calc_list=[] 6 for index,item in enumerate(calc_list): 7 if item.strip().endswith('*') or item.strip().endswith('/'): 8 new_calc_list.append('%s-%s'%(calc_list[index],calc_list[index+1]))

基于正则和迭代模式的计算器源码

源码如下: 1 # encoding:utf-8 2 # Author:"richie" 3 # Date:2017/8/8 4 import re 5 # 待处理数据 6 s = '1-2*((60-30+(-40/5)*(9-2*5/3+7/3*99/4*2998+10*568/14))-(-4*3)/(16-3*2))' 7 pat_bracket = re.compile(r"""\([^(]*?\)""", re.X

用python正则写一个计算器

import re res='1 - 2 * ( (60-30 + (9-2*5/3 + 7 /3*99/4*2998 +10 * 568/14 ) * (-40/5)) - (-4*3)/ (16-3*2) )' res=res.replace(' ','') print(eval(res)) # print(re.findall(r'-?[\d\.]+|\+|\-|\*|/', res)) def grep(list): #过滤符号 list=list.replace("++",&