python正则表达式之简易计算器

正则表达式之简易计算器

需求:使用正则表达式完成一个简易计算器。
功能:能够计算简单的表达式。
如:1*2*((1+2)/(2+3)+1)*5.1-3+2**2

import re

class SimpleCalc(object):

    # 表达式检测
    def check(self,exp):
        # 合法字符检测
        res = re.findall(r"[^\d\+\-\*/\(\)\.]", exp)
        print(res)
        if res:
            print("表达式不正确!!!")
            print("输入了非法字符:", res)
            return False
        # 括号检测
        res = re.findall(r"(?:[\d\)]\()|(?:\([\*/\)])|(?:[\-\+\*/]\))",exp)
        if res :
            print("表达式不正确!!!")
            print("括号使用有误:", res)
            return False
        res = re.findall(r"\(|\)", exp)
        if res.count('(') != res.count(')'):
            print("表达式不正确!!!")
            print("括号不匹配:", res)
            return False
        # 运算符检测
        res = re.findall(r"[\-\+/]{2,}|\*{3,}", exp)
        if res:
            print("表达式不正确!!!")
            print("运算符有误:", res)
            return False
        # 小数点位置检测
        res = re.findall(r"(^(?<=[0-9])?\.\d+)|(\.\d*?\.)|\.(\D|$)", exp)

        if res:
            print("表达式不正确!!!")
            print("小数点位置有误:", res)
            return False

        return True

def main():
    simpleCalc = SimpleCalc()

    while True:
        exp = input("请输入一个正确的表达式(退出请输入t):\n")
        if exp == 't':
            break
        if simpleCalc.check(exp):
            print('=',eval(exp))
        else:
            continue

if __name__ == '__main__':
    main()
输出:
请输入一个正确的表达式(退出请输入t):
1*2*((1+2)/(2+3)+1)*5.1-3+2**2
[]
= 17.32
请输入一个正确的表达式(退出请输入t):
12+a
['a']
表达式不正确!!!
输入了非法字符: ['a']
请输入一个正确的表达式(退出请输入t):

猜你喜欢

转载自blog.csdn.net/lm_is_dc/article/details/80077405
今日推荐