运用正则表达式不使用内置方法实现计算器

#__author__:"Jay guo"
#__date__:2016/9/12
import re
def check(s):
    if re.findall("[a-zA-Z]",s) or re.findall("[*/][^\d(]",s):
        return
    else:
        return s

def format(s):
    s = s.replace(" ","")
    s = s.replace("++","+")
    s = s.replace("+-","-")
    s = s.replace("-+","-")
    s = s.replace("--","+")
    return s

def add_sub(s):
    ret = re.search("\d+\.?\d*[+-]\d+\.?\d*", s)
    if ret:
        x, y = re.split("[+-]", ret.group())
        x = float(x)
        y = float(y)
        if "+" in ret.group():
            end = x + y
        else:
            end = x - y
        s = s.replace(ret.group(), str(end))
        s = s.replace("(","")
        s = s.replace(")","")
    return s
def mul_exc(s):
    ret = re.search("\d+\.?\d*[*/]\d+\.?\d*", s)
    if  ret:
        x,y = re.split("[*/]",ret.group())
        x = float(x)
        y = float(y)
        if "*" in ret.group():
            end = x*y
        else:
            end = x/y
        s = s.replace(ret.group(),str(end))
        s = s.replace("(","")
        s = s.replace(")","")
    return s

def main():
    while True:
        ret = input("PLZ input>>>>:  ")
        ret = check(ret)
        ret = format(ret)
        while True:
            ret = mul_exc(ret)
            ret = add_sub(ret)
            ret = format(ret)
            a = len(re.findall("\d+", ret))
            print ("a",a,ret)
            if a == 2:
                break
        print (re.sub("^\+","",ret))

main()
时间: 2024-08-30 10:54:13

运用正则表达式不使用内置方法实现计算器的相关文章

python开发函数进阶:命名空间,作用域,函数的本质,闭包,内置方法(globales)

一,命名空间 #局部命名空间#全局命名空间#内置命名空间 #三者的顺序#加载顺序 硬盘上--内存里#内置-->全局(从上到下顺序加载进来的)-->局部(调用的时候加载) 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 #全局命名空间 5 a = 5 6 b = 8 7 #局部命名空间(函数) 8 def my_max(): 9 c = a if a > b else b 10 return c 11 m = my_max() 12 pr

匿名函数和内置方法

匿名函数用lambda定义只能用三元运算 python内置方法abs()取绝对值all(可迭代对象)可迭代对象都为真,返回Trueany(可迭代对象)可迭代对象有一个为真,返回Truebin()二进制转换bool()判断真假bytearray()可修改的二进制字节格式callable()是否可以调用ord(输入字符),chr(输入数字) 返回ascii码对应表dir()查看有什么方法divmod(x,y)相除返回余数enumerate(),获取下标eval()把字符串解释出来exec()语句运算

python常用数据类型内置方法介绍

熟练掌握python常用数据类型内置方法是每个初学者必须具备的内功. 一.整型 a = 100 a.xxx() class int(object): def bit_length(self): ##如果将某个整数用2进制表示,返回这个2进制所占bit位数. return 0 def conjugate(self, *args, **kwargs): ##共轭复数 @classmethod # known case def from_bytes(cls, bytes, byteorder, *ar

js-DOM ~ 04. BOM:浏览器对象模型window. 、定时器、在线用户、祝愿墙、BOM的内置方法内置对象

multiple. select列表多选 触发事件后调用有参数的函数要先创建一个函数,然后在函数内调用执行函数 Array.from(伪数组):伪数组变为真数组 indexOf():查询字符的索引 a)  indexOf('abcde') i.      indexOf('a')的索引是0 ii.      indexOf('abc')的索引是0,按照第一个字符的索引 iii.      indexOf('ac')的索引是-1,查找不到ac连续的字符 iv.      indexOf('f')的

第三篇、内置方法

一. 作用域 只要在内存里面存在,则就能使用.(栈) 外层变量,可以被内层变量使用 内层变量,无法被外层变量使用 上面这两句话对吗? 答案:是不对的 如: If 1==1: Name = 'alex' Print name 判断如下:能打印出来吗? Name = {"ns",123} For item in name: Print item Print item 为什么不能打印出来的原因: 理解1: 变量都是指向了内存地址,而item这个内存地址,没有变量指向所以不能被打印 二 .三元

day②:一切皆对象+内置方法+int

一.python基础 对于python,一切事物都是对象,对象基于类创建. 例子: li=[11,22,33] li.append(44) 对象所具备的方法,例如:li列表的增删改查,都不是对象自己所有的,它只是去到这个类里面的方法执行的! 二.数据内型的内置方法 type() 查看对象的类型 dir(类型名) 查看类中提供的所有功能 help(类型名) 查看类中所有详细的功能 help(类型名.功能名) 查看类中某功能的详细 关于dir(),之后,你会看到两边带下划线和不带下划线的方法: __

Python的内置方法,abs,all,any,basestring,bin,bool,bytearray,callable,chr,cmp,complex,divmod

Python的内置方法 abs(X):返回一个数的绝对值,X可以是一个整数,长整型,或者浮点数,如果X是一个复数,此方法返回此复数的绝对值(此复数与它的共轭复数的乘积的平方根) >>> abs(3+2j) 3.605551275463989 >>> abs(3-2j) 3.605551275463989 all(iterable):如果迭代器的所有元素都是true,或者空迭代器,则此方法返回true. any(iterable):迭代器只要有一个元素为false,或者空

面向对象之反射及内置方法

一.静态方法(staticmethod)和类方法(classmethod) 类方法:有个默认参数cls,并且可以直接用类名去调用,可以与类属性交互(也就是可以使用类属性) 静态方法:让类里的方法直接被类调用,就像正常调用函数一样 类方法和静态方法的相同点:都可以直接被类调用,不需要实例化 类方法和静态方法的不同点: 类方法必须有一个cls参数表示这个类,可以使用类属性 静态方法不需要参数 绑定方法:分为普通方法和类方法 普通方法:默认有一个self对象传进来,并且只能被对象调用-------绑定

day27 反射、内置方法

一.isinstance和issubclass class Foo: pass class Son(Foo): pass s = Son() #判断一个对象是不是这个类的对象,传两个参数(对象,类) # print(isinstance(s,Son)) # print(isinstance(s,Foo)) # print(type(s) is Son) # print(type(s) is Foo) #判断一个类是不是另一类的子类,传两个参数(子类,父类) print(issubclass(So