zoukankan      html  css  js  c++  java
  • 老男孩Python全栈开发(92天全)视频教程 自学笔记19

    day19 课程内容:

    第19天的课程就是复习一些正则表达式,以及说一下计算器的思路,我就把我做的计算器代码当这一天的内容吧。

     计算器作业:不eval函数,计算能计算:'1-2*((60-30-8*(9-10/3+7/297/9000+10*568/14))-(-4*3)/(16-3*2))' 的计算器

    用了三天两夜才算写出来,接触正则刚开始的时候,更喜欢使用re.findall() 但是真的在实战中,我切身的感觉到,re.search()才是最常用的,因为比较好跟循环配合使用。

    还有就是代码的逻辑,一开始,我写计算器的时候,恨不得一个函数解决战斗,结果盘根错节的直接蒙了。同样优先级的,同样功能的函数,要单写成一个函数,然后以备调用

    这样可以很大程度的提升逻辑的清晰度,以免除了错,没办法找bug,只能删掉所有代码从头开始写(我是深受其苦啊),好在最后,终于写出来了,三天两夜啊,只写了个计算器

    看来程序员,真的是一个容易猝死的职业啊。

    #s=1-2*((60-30-8*(9-10/3+7/297/9000+10*568/14))-(-4*3)/(16-3*2))
    #判断有没有字母,支持浮点型
    import re,time
    
    def start(): #检查字符串里是否有非法字符
        flag=True
        while flag:
            s=input('请输入要计算的内容s:')
            if re.search('[a-zA-Z]',s):
                print('输入内容含有非法内容')
            elif s=='':
                print('输入算式为空,请重新输入')
            else:
                print('正在计算……')
                flag=False
                #print(s)
        return s
    def md_sy(s): #去除不合规字符
        s=s.replace(' ','')
        s=s.replace('+-','-')
        s=s.replace('--','+')
        s = s.replace('-+', '-')
        s = s.replace('++', '+')
        return s
    def cc(s='(60-30-8*411.3809549998)'):
        flag = True
        while flag:
            ret = re.search('d+.?d*[*/]d+.?d*', s)
            if ret:
                x = ret.group()
                if '*' in x:
                    li = re.split('[*]', x)
                    y = float(li[0]) * float(li[1])
                    y = '{:.10f}'.format(y)
                    s = s.replace(x, y)
                else:
                    li = re.split('/', x)
                    y = float(li[0]) / float(li[1])
                    y = '{:.10f}'.format(y)
                    s = s.replace(x, y)
            else:
                flag = False
        return s
    def jj(s='(-12.0000000000)'):
        if re.search('(-?d+.?d*)', s):
            s = s[1:-1]
        else:
            flag = True
            if s[1] == '-':
                head_li = re.findall('((-d*.?d*)', s)
                # print(head_li)
                ret = re.search('(-d*.?d*', s)
                s = '(' + s[len(ret.group()) + 1:]
                # print(s)
                while flag:
                    ret = re.search('d+.?d*[+-]d+.?d*', s)
                    if ret:
                        x = ret.group()
                        # print(x)
                        if '+' in x:
                            li = re.split('[+]', x)
                            y = float(li[0]) + float(li[1])
                            y = '{:.10f}'.format(y)
                            s = s.replace(x, y)
                        else:
                            li = re.split('-', x)
                            y = float(li[0]) - float(li[1])
                            y = '{:.10f}'.format(y)
                            s = s.replace(x, y)
                    else:
                        s = s[1:-1]
                        head_li.append(s)
                        s = float(head_li[0]) + float(head_li[1])
                        s = str(s)
                        flag = False
            else:
                while flag:
                    ret = re.search('d+.?d*[+-]d+.?d*', s)
                    if ret:
                        x = ret.group()
                        # print(x)
    
                        if '+' in x:
                            li = re.split('[+]', x)
                            y = float(li[0]) + float(li[1])
                            y = '{:.10f}'.format(y)
                            s = s.replace(x, y)
                        else:
                            li = re.split('-', x)
                            y = float(li[0]) - float(li[1])
                            y = '{:.10f}'.format(y)
                            s = s.replace(x, y)
                    else:
                        s = s[1:-1]
                        flag = False
        return s
    def hj(s='1-2*-3259.8476399984/2.000*5*6*9*666'):
        flag=True
        while flag:
            ret = re.search('d+.?d*[*/]-d+.?d*', s)
            if ret:
                if '*' in ret.group():
                    li = re.split('[*]', ret.group())
                    s1 = float(li[0]) * float(li[1])
                    s1 = '{:.10f}'.format(s1)
                    s = s.replace(ret.group(), s1)
                else:
                    li = re.split('/', ret.group())
                    s1 = float(li[0]) /float(li[1])
                    s1 = '{:.10f}'.format(s1)
                    s = s.replace(ret.group(), s1)
            else:
                break
        return s
    def ccjj(s='1-6519.6952799968/2.000*5*6*9*666'):
        flag1=True
        while flag1:
            ret=re.search('d+.?d*[*/]d+.?d*',s)
            if ret:
                if '*' in ret.group():
                    li=re.split('[*]',ret.group())
                    s1=float(li[0])*float(li[1])
                    s1='{:.10f}'.format(s1)
                    s=s.replace(ret.group(),s1)
                else:
                    li = re.split('/', ret.group())
                    s1 = float(li[0]) / float(li[1])
                    s1 = '{:.10f}'.format(s1)
                    s = s.replace(ret.group(), s1)
            else:
                flag1=False
        flag2=True
        while flag2:
            ret = re.search('d+.?d*[+-]d+.?d*', s)
            if ret:
                if '+' in ret.group():
                    li = re.split('[+]', ret.group())
                    s1 = float(li[0]) + float(li[1])
                    s1 = '{:.10f}'.format(s1)
                    s = s.replace(ret.group(), s1)
                else:
                    li = re.split('-', ret.group())
                    s1 = float(li[0]) - float(li[1])
                    s1 = '{:.10f}'.format(s1)
                    s = s.replace(ret.group(), s1)
            else:
                flag2 = False
        return s
    def jsq(s='1-2*((60-30-8*(9-10/3+7/297/9000+10*568/14))-(-4*3)/(16-3*2))'):
        flag=True
        while flag:
            ret=re.search('([^()]+)',s)
            if ret:
                x=ret.group()
                #print(x)
                y=jj(cc(x))
                #print(y)
                s=s.replace(x,y)
                s=md_sy(s)
                #print('s:',s)
                #time.sleep(3)
            else:
                s=md_sy(s)
                s=hj(s)
                s=md_sy(s)
                s=ccjj(s)
                flag=False
        return s
    
    s=start()
    print(jsq(s))
    

      

    
    
  • 相关阅读:
    spring-cloud-gateway动态路由
    spring-cloud-gateway静态路由
    activiti6官方示例笔记
    spring-cloud-gateway过滤器实践
    spring-cloud-gateway简介
    设计模式--策略模式
    学习ConcurrentHashMap1.7分段锁原理
    SpringBoot Failed to configure a DataSource: 'url' attribute is not specified and no embedded datasource could be configured.
    MYSQL触发器的使用
    储存过程 (创建,调用,查询,删除)
  • 原文地址:https://www.cnblogs.com/xuepangzi/p/7954906.html
Copyright © 2011-2022 走看看