迭代器、生成器&装饰器作业

迭代器、生成器&装饰器作业

  • 过滤掉长度小于5的字符串列表,并将剩下的转换成大写字母
#方法一
li=['abcxdex','akdkfjkd','ldkkf','q','p']
li2=[i.upper()for i in li if len(i)>=5]
#方法二
li=['abcxdex','akdkfjkd','ldkkf','q','p']
li2=filter(lambda x :len(x)>5,li)
li3=[i.upper() for i in list(li2)]
print(li3)
 求(x,y)其中x是1-10之间的偶数,y是1-10之间的奇数组成的元祖列表
 结果:[(2, 1), (2, 3), (2, 5), (2, 7), (2, 9), (4, 1), (4, 3), (4, 5), (4, 7), (4, 9), (6, 1), (6, 3), (6, 5), (6, 7), (6, 9), (8, 1), (8, 3), (8, 5), (8, 7), (8, 9)]
  • 求(x,y)其中x是1-10之间的偶数,y是1-10之间的奇数组成的元祖列表
    结果:[(2, 1), (2, 3), (2, 5), (2, 7), (2, 9), (4, 1), (4, 3), (4, 5), (4, 7), (4, 9), (6, 1), (6, 3), (6, 5), (6, 7), (6, 9), (8, 1), (8, 3), (8, 5), (8, 7), (8, 9)]
li=[(x,y)for x in range(1,10) for y in range(11) if x%2==0 if y%2==1]
#或:li=[(x,y)for x in range(1,10) for y in range(11) if x%2==0 and y%2==1]
  • 求list中3,6,9组成的列表

    结果:list = [[1,2,3],[4,5,6],[7,8,9]]

li=[[i-2,i-1,i]for i in range(1,10) if i%3==0]

#或
li=[list(range(i-2,i+1))for i in range(1,10)if i%3==0]
  • 构建一个列表:[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
li=list(zip([x for x in range(6)],[x for x in range(1,7)]))
#或
li=[(i,i+1)for i in range(0,6)]
  • 写生成器,从文件中读取内容,在每一次读取到的内容之前加上“(*)”之后在返回给用户
def func():
    with open('info',mode='r',encoding='utf-8')as f:
        data=f.readline()
        while data:
            yield '(*)'+data
            data=f.readline()
f=func()
try:
    while True:
        print(f.__next__().strip())
except:
    print('结束')
    
#或
def func():
    with open('info',mode='r+',encoding='utf-8')as f:
        for line in f:
            yield '(*)'+line.strip()
ge=func()
try:
    while True:
        print(ge.__next__().strip())
except:
    print('结束')
    
  • 处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都有输出在屏幕(用生成器)
def func1():
    with open('info',mode='r+',encoding='utf-8')as f:
        search=input('请输入要搜索的内容:')
        for line in f :
            if search in line:
                yield line.strip()
            else:
                continue
ge=func1()
while True:
    try:
        print(next(ge))
    except:
        break
        
  • 编写装饰器,为多个函数加上认证的功能(用户的账号和密码来源于文件)?
    要求:登录成功一次,后续的函数都无需再输入用户名和密码。
flag=True
def login():
    dic={}
    global flag
    with open('info',mode='r+',encoding='utf-8')as f:
        for i in f.readlines():
            li=i.strip().split(',')
            dic[li[0]]=li[1]
            username=input('用户名:')
            if username in dic.keys():
                pwd=input('密码:')
                if dic[username]==pwd:
                    flag=False
                    break
                else:
                    print('密码错误:')
            else:
                print('用户名不存在')
def timmer_out(flag):
    def timmer(func):
        def inner(*args,**kwargs):
            if flag:
                login()
                ret=func(*args,**kwargs)
                return ret
            else:
                ret=func(*args,**kwargs)
                return ret
        return inner
    return timmer
@timmer_out(flag)
def func1():
    print('登陆成功')

@timmer_out(flag)
def func2():
    print('收藏成功')

func1()
func2()

  • 编写装饰器,为多个函数加上记录调用功能,要求每次调用函数都将被调用的函数名写入文件
flag=True
def timmer_out(flag):
    def timmer(func):
        def inner(*args,**kwargs):
            if flag:
                with open('text1',mode='a+',encoding='utf-8')as f:
                    f.write(func.__name__+'\n')
                ret=func(*args,**kwargs)
                return ret
            else:
                ret=func(*args,**kwargs)
                return ret
        return inner
    return timmer
@timmer_out(flag)
def func1():
    print('注册')

@timmer_out(flag)
def func2():
    print('登陆')

posted @ 2021-03-26 19:56  辰-月  阅读(81)  评论(0)    收藏  举报