首页 > 其他 > 详细

一些作业

时间:2018-07-20 21:57:04      阅读:175      评论:0      收藏:0      [点我收藏+]

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__+\n)              #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)

 

一些作业

原文:https://www.cnblogs.com/rcat/p/9343681.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!