zoukankan      html  css  js  c++  java
  • 004 python 函数,模块知识点运用示例

    1. 给定验证码长度n,生成随机验证码,验证码由数字、字母组成(参考chr()内置方法)

    ```python

    # 第33~126号(共94个)是字符,其中第48~57号为0~9十个阿拉伯数字;65~90号为26个大写英文字母

    # 97~122号为26个小写英文字母,其余为一些标点符号、运算符号等。

    import random   

    def identify_code(n):     

      icode ='' for i in range(n):

    # s1=chr(random.randint(65,90))

    # s2=chr(random.randint(48,57))

    s1 = chr(random.randrange(65, 90,1))

    s2 = chr(random.randrange(97, 126, 1))

    # s2 = chr(random.randrange(48, 57,1))

    # s2 = str(random.randrange(0, 9, 1))

    s3 = str(random.randint(0, 9))   

      icode +=random.choice([s1,s2,s3])   

      return icode print(identify_code(9))

    ```

    2. 打印进度条,进度条图形如下图所示,以下代码为参考代码

    ```

    #=========知识储备==========
    #进度条的效果 [# ] [## ] [### ] [#### ]

    #指定宽度

    print('[%-15s]' %'#')

    print('[%-15s]' %'##')

    print('[%-15s]' %'###')

    print('[%-15s]' %'####')

    #打印%

    print('%s%%' %(100))

    #第二个%号代表取消第一个%的特殊意义

    #可传参来控制宽度

    print('[%%-%ds]' %50)

    #[%-50s]

    print(('[%%-%ds]' %50) %'#')

    print(('[%%-%ds]' %50) %'##')

    print(('[%%-%ds]' %50) %'###')

    1,别人做的答案

    import time

    a = 5  # a为宽度省略号宽度

    str = 0

    for i in range(a):   

      str += '#' time.sleep(1)   

      print(('\r[%%-%ds]' % a) % str, end='')

    2,这是网上答案

    import sys

    import time   

    def progress(percent,width=50):     

      if percent >= 1:         

        percent=1         

        show_str=('[%%-%ds]' %width) %(int(width*percent)*'#')         

        print('\r%s %d%%' %(show_str,int(100*percent)),file=sys.stdout,flush=True,end='')

    #=========应用==========

    data_size=1025

    recv_size=0

    while recv_size < data_size:   

      time.sleep(0.1)  

    #模拟数据的传输延迟

    recv_size+=1024 #每次收1024

    percent=recv_size/data_size #接收的比例

    progress(percent,width=70) #进度条的宽度70

    ```

    3. 装饰器应用练习

    1.编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),
    要求登录成功一次,后续的函数都无需再输入用户名和密码
    注意:从文件中读出字符串形式的字典,可以用eval('{"name":"egon","password":"123"}')
    转成字典格式
     1 定义一个字典看用户登录状态
     2 auth_status={
     3     'user':None,
     4     'status':False#状态是没有登录
     5 }
     6 def wrapper(fun):
     7     def inner(*args,**kwargs):
     8         if auth_status['status']:#如果登录了,就执行fun函数
     9             ret = fun(*args, **kwargs)  # index/home
    10             return ret
    11         else:#如果没有登录,就实现认证功能
    12             username = input('name:>>').strip()#获取用户名
    13             password = input('password:>>').strip()#获取密码
    14             f=open('login.txt','r',encoding='utf-8')#打开文件获取用户的信息
    15             user_dic=f.read()#读出来的是字符串类型
    16             zhddict=eval(user_dic)#转换成字典类型
    17             #print(type(zhddict))#查看eval转换后的类型
    18             if zhddict.get(username) and password == zhddict[username]:#如果用户名和密码都正确,就显示登陆成功,不正确就显示登录失败
    19                 print('login successful')
    20                 auth_status['user']=username #登陆成功后就把用户名放在user里
    21                 auth_status['status']=True    状态改为True
    22                 ret = fun(*args,**kwargs)#index/home
    23                 return ret
    24             else:
    25                 print('login faild')
    26     return inner
    27 @wrapper #语法糖
    28 def index():
    29     print("欢迎来到首页")
    30 
    31 @wrapper
    32 def home():
    33     print("欢迎回家")
    34 
    35 index()
    36 index()
    37 home()
    38 index()
    
    

    2.编写下载网页内容的函数,

    要求功能是:用户传入一个url,函数返回下载页面的结果

    编写装饰器,实现缓存网页内容的功能:

    具体:实现下载的页面存放于文件中,如果文件内有值(文件大小不为0),就优先从文件中读取网页内容,

    否则,就去下载,然后存到文件中

     1 from urllib.request import urlopen
     2 url_l=[]#存放
     3 def huancun(func):
     4     '''
     5         实现缓存网页内容的功能
     6     '''
     7     def inner(*args,**kwargs):#args传的就是url,那么得到url就得用url = args[0]
     8         url = args[0]  # 取url
     9         filename=str(hash(url))#用hash算法吧url转换为数字作为文件名,但是数字不能作为文件名,必须转换成str类型
    10         if url in url_l:#如果url已经在列表里了,就说明你已经下载过了,就不需要在执行func了,就直接打开就行了
    11             f=open(filename,'rb')
    12             ret=f.read()
    13         else:#如果不在列表里就要把添加到url列表
    14             url_l.append(url)
    15             ret = func(*args, **kwargs)
    16             f=open(filename,'wb')#打开文件
    17             f.write(ret)#并且用写的方式把它写进文件里
    18         f.close()
    19         return ret
    20     return inner
    21 
    22 
    23 @huancun#get=huancun(get)
    24 def get(url):#定义一个get函数
    25     return urlopen(url).read()#返回读取的网页
    26 print(get('http://www.people.com.cn'))
    27 print(get('http://www.people.com.cn'))#调用get方法,传一个'http://www.people.com.cn'网址进去
    28 print(get('http://www.people.com.cn'))
    
    
    
     
  • 相关阅读:
    Encoding
    F Takio与Blue的人生赢家之战
    D FFF团的怒火
    C Golden gun的巧克力
    B 倒不了的塔
    A jubeat
    17230 计算轴承半径
    10686 DeathGod不知道的事情
    10688 XYM-AC之路
    10692 XYM-入门之道
  • 原文地址:https://www.cnblogs.com/abdm-989/p/11359918.html
Copyright © 2011-2022 走看看