Python练习(2)

案例一:

请实现一个装饰器,每次调用函数时,将函数名字以及调用此函数的时间点写入文件中

代码部分:

import time

time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# 有参装饰器
def decorator(time):
    def func_wrapper(func):
        def wrapper():
            func()
            with open("Demo3.text", "a+",encoding="utf-8") as f:
                f.write(f"函数名:{func.__name__} ---- 执行时间:{time} \n")
        return wrapper
    return func_wrapper

# 有参类装饰器
class class_decorator():
    def __init__(self,time):
        self.time = time

    def __call__(self, func):
        def wrapper():
            func()
            with open("Demo3.text", "a+", encoding="utf-8") as f:
                f.write(f"函数名:{func.__name__} ---- 执行时间:{self.time} \n")
        return wrapper
# @class_decorator(time) # 有参类装饰器
@decorator(time) # 有参装饰器
def hey():
    print("Hello World!" + "--------" + time)


# @class_decorator(time) # 有参类装饰器
@decorator(time) # 有参装饰器
def bye():
    print("Bye World!" + "--------" + time)

hey()
bye()

运行结果:

案例二:

完成文件写入功能,任意写入一个字符,编写装饰器,实现写入文件时增加当前系统时间

代码部分:

import time

time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())


# 有参装饰器
def decorator(time):
    def func(func):
        def wrapper(*args, **kwargs):
            func(*args, **kwargs)
            with open("Demo4.text", "a+", encoding="utf-8") as f:
                f.write(time + "\n")

        return wrapper

    return func


# 有参类装饰器
class class_decorator():
    def __init__(self, time):
        self.time = time

    def __call__(self, func):
        def wrapper(*args, **kwargs):
            func(*args, **kwargs)
            with open("Demo4.text", "a+", encoding="utf-8") as f:
                f.write(time + "\n")

        return wrapper


# @decorator(time) # 有参装饰器
@class_decorator(time)
def fileWrite(str):
    with open("Demo4.text", "a+", encoding="utf-8") as f:
        f.write(str + "---------")


s = input()
fileWrite(s)

运行结果:

案例三:

使用with语法完成文件的复制

代码部分:

with open("Demo5_copy.txt", "w+", encoding="utf-8") as f, open("Demo5.text", "r", encoding="utf-8") as r:
    f.write(r.read())
    print(f"已完成文件的复制:复制文件名 {r.name} , 复制后文件名 {f.name} ")

运行结果:

案例四:

完成登录系统,登录时数据使用序列化和反序列化

代码部分:

import pickle


class Person():
    def __init__(self, name, passwd):
        self.name = name
        self.passwd = passwd

    def dump(self):
        user = {'name': self.name, 'passwd': self.passwd}
        return pickle.dumps(user)

users = []
Person1 = Person("obboda", "ob123456") # 用户1
users.append(Person1)
Person2 = Person("zhangsan", "zs123456") # 用户2
users.append(Person2)
Person3 = Person("lisi", "ls123456") # 用户3
users.append(Person3)


def isStandard(passwd):
    if len(passwd) < 8 or len(passwd) > 16:
        return False
    return True

def Login():
    global Person
    name = input().strip()
    passwd = input().strip()
    p = Person(name, passwd)

    if isStandard(passwd):
        for user in users:
            if p.dump() == user.dump():
                print("登录成功!")
                return True
        print("登录失败!")
    else:
        print("格式错误,请输入8~16位数字的密码")
        return Login()

if __name__ == "__main__":
    Login()

运行结果:

  • 6
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值