作业

1、 编写日志装饰器,实现功能如:一旦函数f1执行,则将消息2017-07-21 11:12:11 f1 run写入到日志文件中,日志文件路径可以指定
注意:时间格式的获取
import time
time.strftime('%Y-%m-%d %X')
import time


def log_f(func):
   def wrapper(*args, **kwargs):
      timer = time.strftime('%Y-%m-%d %X')
      with open("log_s.txt", mode='at', encoding='utf-8')as f:
         log_data = f"{timer} {func1.__name__}run.....\n"
         f.write(log_data)

      res = func(*args, **kwargs)
      return res

   return wrapper

@log_f
def func1():
   ...
func1()
func1()

2、基于迭代器的方式,用while循环迭代取值字符串、列表、元组、字典、集合、文件对象
s = "your name is liu"
s_iterator = s.__iter__()
while True:
   try:
      res = s_iterator.__next__()
      print(res)
   except StopIteration:
      break

l = [1, 2, 3, 4, 5, 6, 7]
l_iterator = l.__iter__()
while True:
   try:
      res1 = l_iterator.__next__()
      print(res1)
   except StopIteration:
      break
t = (1, 2, 3, 4, 5, 6, 7)
t_iterator= t.__iter__()
while True:
   try:
      res2 = t_iterator.__next__()
      print(res2)
   except StopIteration:
      break
d = {"k1":1,"k2":2,"k3":3,"k4":4}
d_iterator = d.__iter__()
while True:
   try:
      res3 = d_iterator.__next__()
      print(res3)
   except StopIteration:
      break
s = {1,2,3,4,5,6}
s_iterator = s.__iter__()
while True:
   try:
      res4 = s_iterator.__next__()
      print(res4)
   except StopIteration:
      break

with open('a.txt',mode="rt",encoding='utf-8')as f:
   while True:
      try:
         res=f.__next__()
         print(res)
      except StopIteration:
         break


3、自定义迭代器实现range功能
def my_range(start, stop, step=1):
   while start < stop:
      yield start
      start += step


for i in my_range(0, 100, 10):
   print(i)

====================  本周选做作业如下  ====================
编写小说阅读程序实现下属功能
一:程序运行开始时显示
    0 账号注册
    1 登录功能
    2 充值功能
    3 阅读小说

def select():
   print('''
         0 账号注册
            1 登录功能
            2 充值功能
            3 阅读小说
''')
select()
二:完成下述功能
2.1、账号注册
        -  针对文件db.txt,内容格式为:"用户名:密码:金额" 完成注册功能
def register(db_path):
   with open(db_path, mode="at", encoding='utf-8')as f:
      inp_name = input('请输入你的用户名:').strip()
      inp_pwd = input('请输入你的密码:').strip()
      inp_money = input("请输入你的金额:").strip()
      re_pwd = input("请再次确认你的密码:").strip()
      if inp_pwd == re_pwd:
         print("注册成功")
         f.write("%s:%s:%s\n" % (inp_name, inp_pwd,inp_money))


register("a.txt")
2.2、充值功能
import os
def change_money():
   with open("a.txt",mode='rt',encoding='utf-8')as f,open('.a.txt.swap', mode='wt', encoding='utf-8')as t:
      data = f.readline()
      name,pwd,money = data.strip().split(":")
      print(money)
      while True:
         user_money = input("请输入你需要充值的金额:").strip()
         if not user_money.isdigit():
            print("输入的金额不正确,请重新输入!")
            continue
         money = int(user_money)+int(money)
         break
      user_list = [name,pwd,str(money)]
      new_data = ":".join(user_list)
      t.write(new_data)
   os.remove('a.txt')
   os.rename(".a.txt.swap","a.txt")

change_money()


三:文件story_class.txt存放类别与小说文件路径,如下,读出来后可用eval反解出字典
{"0":{"0":["倚天屠狗记.txt",3],"1":["沙雕英雄转.txt",10]},"1":{"0":["令人羞耻的爱.txt",6],"1":["二狗的妻子与大草原的故事.txt",5]},}

3.1、用户登录成功后显示如下内容,根据用户选择,显示对应品类的小说编号、小说名字、以及小说的价格
"""
0 玄幻武侠
1 都市爱情
2 高效养猪36技
"""

3.2、用户输入具体的小说编号,提示是否付费,用户输入y确定后,扣费并显示小说内容,如果余额不足则提示余额不足

四:为功能2.2、3.1、3.2编写认证功能装饰器,要求必须登录后才能执行操作

五:为功能2.2、3.2编写记录日志的装饰器,日志格式为:"时间 用户名 操作(充值or消费) 金额"


附加:
可以拓展作者模块,作者可以上传自己的作品
posted @ 2020-07-22 22:02  刘海子  阅读(16)  评论(0)    收藏  举报