• 优雅使用函数,使其顺序恰当,搭配合理


    函数的使用涉及很多逻辑合理性的内容,优秀的代码,逻辑清晰,代码简洁,函数调用恰当,内存占用小,cpu计算量小,方方面面涉及很多技巧和思维方式,需要程序员多读代码,多思考,勤试错。

    这篇代码总觉得还有很多需要优化的地方,但总是逻辑不清,搞不明白修改哪里合适,怎么修改?先贴上来,以后有思路再做调整。

    需求是这样的:从一个列有员工信息的文件中查找所需要的内容,给出这个文件格式如下

    id name age   phone  post
    1,ryan,28,135********,HR
    2,...
    3,...
    import re
    def show(i,inquire,li,dic):
        '''
        展示出用户要求展示的内容,即select与where之间的内容
        :param i:  循环文件得来的每一行
        :param inquire: 用户输入的语句
        :param li: 放入筛选结果的列表
        :param dic: 文件每行内容分割后放入的字典
        :return:
        '''
        lis = re.split('select|where.*|s|,', inquire)
        lis = list(filter(lambda x: x, lis)) #筛选出select与where之间的内容
        for k in lis:  #循环select与where之间的内容
            if k == '*':  #如果是*
                li.append(i)  #则把这一整行都放入列表
            else:
                li.append(dic[k])  #否则把字典中k的值放入列表
    
    def filt(i,inquire,li,dic):
        '''
        筛选出符合条件的行,即符合where之后条件的内容
        :param i:  循环文件得来的每一行
        :param inquire: 用户输入的语句
        :param li: 放入筛选结果的列表
        :param dic: 文件每行内容分割后放入的字典
        :return:
        '''
        lis = re.split('where', inquire)
        if '>' in lis[1]:
            lis8 = lis[1].split('>')
            if lis8[0].strip() in dic and int(dic[lis8[0].strip()]) > int(lis8[1].strip()):
                show(i,inquire,li,dic)
        if '<' in lis[1]:
            lis8 = lis[1].split('<')
            if lis8[0].strip() in dic and int(dic[lis8[0].strip()]) < int(lis8[1].strip()):
                show(i, inquire, li, dic)
        elif '=' in lis[1]:
            lis8 = lis[1].split('=')
            if lis8[0].strip() in dic and dic[lis8[0].strip()] == lis8[1].strip():
                show(i, inquire, li, dic)
        elif 'like' in lis[0]:
            lis8 = lis[1].split('like')
            if lis8[1].strip() in dic and lis8[1].strip() in dic[lis8[0].strip()]:
                show(i, inquire, li, dic)
    
    with open('staff_information',encoding='utf-8') as f:
        inquire = input('请输入语句:').strip()
        for i in f:
            li = []
            lis = i.strip().split(',')
            dic = {'name': lis[1], 'id': lis[0], 'age':lis[2], 'phone': lis[3], 'job': lis[4]}
            #把文件内容分割后(注意每分割必先除去前后空字符),然后把每个元素放入一个key是代表每列内容名字的字典中
            filt(i, inquire, li, dic)  #过滤文件内容并按用户要求仿佛列表中
            if li:print(li)
    
    #用胡输入的查询语句如下:
    #select name,age where age >22
    #select * where phone like 135
    #selext  name where  post=HR
    员工信息表查询
  • 相关阅读:
    git 拉取远程代码 git branch -vv --all
    常用命令统计
    topology key
    gstreamer 相关直播源(rtmp rtsp)
    汉诺塔问题 最简单的图文讲解递归实现
    RTP 用ffmpeg
    kurento + nodejs 开源项目 webRTC 转成 RTMP输出
    RTP SDP 详解 RTCP 附带说了一下SRTP RTSP
    RxSwiftCommunity/Action使用介绍
    zsh Shell 增加自动补全、语法高亮
  • 原文地址:https://www.cnblogs.com/RyanJin/p/8290268.html
Copyright © 2020-2023  润新知