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'))
    
    
    
     
  • 相关阅读:
    如何在Ubuntu Server 18.04上安装Microsoft的Procmon
    如何在Ubuntu 20.04上安装Wine 5.0
    如何在Kali Linux 2020中启用SSH服务
    如何在Ubuntu 20.04 LTS Focal Fossa上安装Apache Groovy
    如何使用命令在Ubuntu 20.04 Linux上安装Vmware Tools
    在Ubuntu 20.04 LTS Focal Fossa上安装Zabbix Agent
    hdu 2089 不要62
    hdu 2093 成绩排名
    hdu 2104 hide handkerchief
    leetcode147对链表进行插入排序
  • 原文地址:https://www.cnblogs.com/abdm-989/p/11359918.html
Copyright © 2011-2022 走看看