zoukankan      html  css  js  c++  java
  • day16正则表达式作业

    
    
     1、匹配一篇英文文章的标题 类似 The Voice Of China

    #
    ([A-Z][a-z]*)( [A-Z][a-z]*)*
    2、匹配一个网址
    #(https|http|ftp)://[^s]+    #没用到空白符就匹配出
    
    
    3、匹配年月日日期 类似 2018-12-06 2018/12/06 2018.12.06
    d{4}(-|/|.)d{1,2}1d{1,2}
    #d{4}(?P<tag>[.-+@])d{1,2}(?P=tag)d{1,2}
    ret3 = re.findall('d{4}(?P<tag>[.-+@])d{1,2}(?P=tag)d{1,2}','2018-12-12')
    print(ret3)
     
    4、匹配15位或者18位身份证号
    # [1-9]d{14}(d{2}[dx])?
     5、从lianjia.html中匹配出标题,户型和面积,结果如下:
     [('金台路交通部部委楼南北大三居带客厅   单位自持物业', '3室1厅', '91.22平米'), ('西山枫林 高楼层南向两居 户型方正 采光好', '2室1厅', '94.14平米')]
    import re
    with open('lianjia.html',encoding='utf-8') as f:
        content = f.read()
    par = '"">(?P<loc>.*?)</a>.*?<span class="divide">/</span>(?P<type>.*?)<span class="divide">/</span>(?P<area>.*?)<span class="divide">/</span>'
    ret = re.findall(par,content,re.S) #re.s 点可以匹配任意字符 .
    print(ret)
    6 发红包
    怎么能 第一个人和最后一个人 能抢到多少钱 是平均概率
    import random
    def red_pac(money,num):
        #取num-1 个点
        ret = random.sample(range(1,money*100),num-1)
        # print(ret)
        ret.sort()
        ret.insert(0,0)         # 确定长度 200
        ret.append(money*100)
        print(ret)
        for i in range(len(ret)-1):     # 10  09
            value = ret[i+1] - ret[i]   #
            yield (value/100)
    g = red_pac(200,10)
    sum = 0
    for i in g:
        print(i)
        sum += i
    print(sum)
    7. 检验大文件的一致性
        一个大文件 多次 校验
    两个文件  为什么要加密去比较?
        文件的一致性 校验都是 md5  市面上的
    
        有一个场景
            代码的更新
            100 个代码 2019年 3月 更新的代码  要不要记录下来
            更改之后的代码   更新了一台 电脑忘了哪台了
            两个md5 值进行 对比
        视频软件
            下载完成之后,  转转转  正在检测当前文件是否可用
            这是一个损坏的文件   不能使用
    import hashlib
    md5 = hashlib.md5()
    md5.update(b'hello')
    md5.update(b'world')
    ret = md5.hexdigest()
    print(ret)
    
    md5 = hashlib.md5()
    md5.update(b'helloworld')
    ret = md5.hexdigest()
    print(ret)
    
    import os
    # path  = r''
    def file_md5(path):
        filesize = os.path.getsize(path)
        md5 = hashlib.md5()
    
        with open(path,'rb') as f:
            while filesize >= 4096:
                content = f.readline(4096)
                md5.update(content)
                filesize-=4096
            else:
                content = f.read(filesize)
                filesize = 0
                if content :
                    md5.update(content)
        return md5.hexdigest()
    def cmp_file(path1,path2):
        return file_md5(path1) == file_md5(path2)
    path1 = r'H:python小象第02部分-Python之基础讲解(09-28)day18-文件处理与三元运算2-python-全栈三期-day18 文件处理b模式.mp4'
    # path2 = r'H:python小象第02部分-Python之基础讲解(09-28)day18-文件处理与三元运算2-python-全栈三期-day18 文件处理b模式.mp4'
    path2 = r'H:python2017年老男孩最新全栈python第2期视频教程 全套完整版-20160816-20170313day18-python 全栈开发-基础篇18-13 python 全栈开发-基础篇-day18 作业介绍.avi'
    ret = cmp_file(path1,path2)
    print(ret)

    8注册登录

    
    
    import hashlib
    def md5(username,password):  # 可复用  多次用
        md5_obj = hashlib.md5(username[::-1].encode('utf-8'))#翻转盐
        md5_obj.update(password.encode('utf-8'))
        return md5_obj.hexdigest()
    def get_line():   #可复用
        with open('userinfo', encoding='utf-8',mode='r') as f:
            for line in f:
                user, pwd = line.strip().split(',')
                yield user,pwd
    def register():
        flag = True
        while flag:
            user1 = input('user: ')
            pwd1 = input('pwd: ')
            for user,pwd in get_line():
                if user == user1:
                    print('你输入的用户名已经存在!')
                    break
            else:
                flag = False
        pwd1 = md5(user1,pwd1)
        with open('userinfo', encoding='utf-8',mode='a') as f:
            f.write('%s,%s
    '%(user1,pwd1))
    def login():
        register()
        user2 = input('user: ')
        pwd2 = input('pwd: ')
        for user, pwd in get_line():
            if user == user2 and pwd == md5(user2,pwd2):
                return True
    ret = login()
    if ret:
        print('登陆成功')    
     

    9

    5.计算当前月的1号的时间戳时间
    #结构化 时间 年月日 时分秒  # 后面的全都是0   #不取的话
    #字符串时间 年
    #字符串时间 ---》 结构化时间
    
    # def first_day(f):
    #     str_t = time.strftime('%Y-%m')
    #     tup_t = time.strptime(str_t, '%Y-%m')
    #     stamp_t = time.mktime(tup_t)
    #     return stamp_t
    # f = first_day(f)
    # print(f)
    
    #当前年月日的凌晨12点对应的时间戳时间是多少
    #当前年月日的凌晨12点对应的时间戳差了多少s
    
    # 公司 客户资源管理系统
        #没有公网的服务器   在学校里能用 出了就用不了 没钱
    #北京校区招人  上海校区招人
    
    #每天晚上12点
    #用的是当天晚上的时间戳作为文件名
    #随便就用了

     9分离出最里面的括号

    '1-2*((60-30+(9-2*5/3+7/3*99/4*2998+10*568/14)*(-40/5))-(-4*3)/(16-3*2))'
    
    
    #(^[()]+)     #四个最里面的括号 都具有的属性是 里面都没有()
    ^的用法(在中括号里为非的意思)  后面的元素都管用  换句话说: 碰到()都是非   [^12345] 就是12345都不匹配 
    #(-?(D?d+D?d+)+)这个也可以

    '1-2*((60-30+(9-2*5/3+7/3*99/4*2998+10*568/14)*(-40/5))-(-4*3)/(16-3*2))'

     

      深入浅出——指言论或文章的观点主题意义深刻,但在语言文字的表达方式上却浅显易懂。

  • 相关阅读:
    #C++初学记录(sort函数)
    #C++初学记录(贪心算法#结构体#贪心算法)
    #C++初学记录(初识汉诺塔)
    vuex中使用多模块时,如果不同模块中action有名字冲突该如何解决
    vue中二次封装别人组件,动态传属性使用v-bind="$attrs" 和 v-on="$listeners"
    在vue.config.js项目中配置proxy解决跨域问题
    Vue里报错:Maximum call stack size exceeded
    git报错:pre-commit hook failed (add --no-verify to bypass)
    十大排序算法,用JS写出来
    基数排序(JS代码)
  • 原文地址:https://www.cnblogs.com/Doner/p/10592065.html
Copyright © 2011-2022 走看看