zoukankan      html  css  js  c++  java
  • 一些作业

    1:编写装饰器,为多个函数加上认证的功能(用户的账号密码来源于文件),

       要求登录成功一次,后续的函数都无需再输入用户名和密码

     1 def wrapper(func):
     2     def inner(*args,**kwargs):
     3         print('欢迎加入我们的网站!')
     4         func()
     5         print('点击此链接跳转!')
     6     return inner
     7 
     8 @wrapper
     9 def register():
    10     with open('user_file', mode='r+',encoding='utf-8') as f:
    11         f.write('{} {}'.format(username,password))
    12 
    13 @wrapper
    14 def log_in():
    15      with open('user_file',mode='r',encoding='utf-8') as f1:
    16         user_data = f1.readline()
    17      i = 1
    18      while i <= 3:
    19          usn = input('请输入您的用户名:')
    20          pwd = input('请输入您的密码:')
    21          if user_data.split()[0].strip() == username and user_data.split()[1].strip() == pwd:
    22              print('Welcome!')
    23              break
    24          else:
    25              print('用户名或密码错误,请再输入一次您的用户名和密码!您还有{}次输入机会'.format(3-i))
    26              i += 1
    27              continue
    28 
    29 
    30 username = input('请输入您注册的用户名:')
    31 password = input('请输入您的注册用户名密码:')
    32 register()
    33 log_in()

    官方答案:

     1 FLAG = False                      #为了使后续的函数都无需再输入用户名和密码
     2 def login(func):
     3     def inner(*args,**kwargs):
     4         global FLAG
     5         if FLAG == True:
     6             ret = func(*args,**kwargs)                   #func是被装饰的函数
     7             return ret
     8         else:
     9             username = input('>>>username:')
    10             password = input('>>>password:')
    11             if username == 'xzb' and password == '123456':
    12                 FLAG = True
    13                 ret = func(*args,**kwargs)                 #func是被装饰的函数
    14                 return ret
    15             else:
    16                 print('登录失败!')
    17     return inner
    18 
    19 @login
    20 def shoplist_add():
    21     print('增加一件商品!')
    22 
    23 @login
    24 def shoplist_del():
    25     print('删除一件商品!')
    26 
    27 shoplist_add()
    28 shoplist_del()

    2.编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名称写入文件

     1 def log(func):
     2     def inner(*args,**keargs):
     3         with open('log',mode='a',encoding='utf-8') as f:
     4             f.write(func.__name__+'
    ')              #func.__name__获取函数名字
     5         ret = func(*args,**keargs)
     6         return ret
     7     return inner
     8 
     9 @log
    10 def shoplist_add():
    11     print('增加一件商品!')
    12 
    13 @log
    14 def shoplist_del():
    15     print('删除一件商品!')
    16 
    17 shoplist_add()
    18 shoplist_del()

    3.编写下载网页的函数,要求功能时:用户传入一个url,函数返回下载页面的结果,

    如果文件内有值,就优先从文件中读取网页内容,否则就去下载

     1 import os
     2 from urllib.request import urlopen
     3 def cache(func):
     4     def inner(*args,**kwargs):
     5         if os.path.getsize('web_cache'):        #os.path.getsize()判断内容是否为空
     6             with open('web_cache','rb') as f:
     7                 return f.read()
     8         ret = func(*args,**kwargs)
     9         with open('web_cache','wb') as f:
    10             f.write(b'******'+ret)        #这个地方要注意,ret是bytes类型,所以前面加的字符串也要是bytes类型
    11         return ret
    12     return inner
    13 
    14 @cache
    15 def get(url):
    16     code = urlopen(url).read()
    17     return code
    18 
    19 ret = get('http://www.baidu.com')
    20 print(ret)
    21 ret = get('http://www.baidu.com')  ##
    22 print(ret)
  • 相关阅读:
    hdu1238 Substrings
    CCF试题:高速公路(Targin)
    hdu 1269 迷宫城堡(Targin算法)
    hdu 1253 胜利大逃亡
    NYOJ 55 懒省事的小明
    HDU 1024 Max Sum Plus Plus
    HDU 1087 Super Jumping! Jumping! Jumping!
    HDU 1257 最少拦截系统
    HDU 1069 Monkey and Banana
    HDU 1104 Remainder
  • 原文地址:https://www.cnblogs.com/rcat/p/9343681.html
Copyright © 2011-2022 走看看