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消费) 金额"
附加:
可以拓展作者模块,作者可以上传自己的作品