用python正则写一个计算器

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用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("++","+")
    list=list.replace(‘+-‘,‘-‘)
    list=list.replace(‘-+‘,‘-‘)
    list=list.replace(‘--‘,‘+‘)
    return list
def jisuan(list,x):
    #计算乘除
    index=list.index(x)
    if x==‘*‘:
        num=float(list[index-1])*float(list[index+1])
    else:
        num=float(list[index-1])/float(list[index+1])
    del list[index-1],list[index-1],list[index-1]
    list.insert(index-1,str(num))
    return list

def jisuan2(list):
    #计算加减
    index=list.index(‘+‘)
    num = float(list[index - 1]) +float(list[index + 1])
    del list[index - 1], list[index - 1], list[index - 1]
    list.insert(index - 1, str(num))
    return list

def pangduan(list):
    #判断计算先后顺序
    while 1:
        if ‘*‘in list and ‘/‘not in list:
            jisuan(list,‘*‘)
        elif ‘/‘ in list and ‘*‘not in list:
            jisuan(list,‘/‘)
        elif ‘*‘in list and ‘/‘in list:
            a=list.index(‘*‘)
            b=list.index(‘/‘)
            if a>b:
                jisuan(list,‘*‘)
            else:
                jisuan(list,‘/‘)
        elif ‘+‘in list:
            jisuan2(list)
        else:
            num = 0
            for i in list:
                num+=float(i)
            return num
def zhaokuohao(string):
    #寻找所有里层括号,和括号并计算结果
    res1=re.search(‘\([^()]+\)‘,string)
    if res1:
        kuohao=res1.group()
        mylist=re.findall(r‘-?[\d\.]+|\+|\-|\*|/‘, res1.group())
        x=pangduan(mylist)
        string=string.replace(kuohao,str(x))
        # print(x)
        string=grep(string)
        # print(string)
        return zhaokuohao(string)
    else:
        # print(string)
        return string
def end(string):
    #处理剩下无括号的外层
    b=re.findall(r‘-?[\d\.]+|\+|\-|\*|/‘,string)
    print(pangduan(b))
end(zhaokuohao(res))
end(zhaokuohao(‘1+1‘))

 

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

Python练习册 第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-),(http://tieba.baidu.com/p/2166231880)(代码片段

python基础学习(十三)

python基础学习笔记(十三)

python 正则表达式

Python从零开始写爬虫-2 使用正则表达式解析HTML

五一放假作业4.30 用正则表达式写一个计算器!去掉括号,计算式子结果!