python第四次作业

题目

复制代码
练习1:给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),
可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数

代码

python 复制代码
from typing import List

def test1(nums):
    seem = set()
    for num in nums:
        if num in seem:
            return num
        seem.add(num)
    return -1

def main():
    print()
    nums = [
        [1, 3, 4, 2, 2],          # 重复2
        [3, 1, 3, 4, 2],          # 重复3
        [1, 1],                   # 重复1
        [2, 2, 2, 2, 2],          # 重复2
        [1, 2, 3, 4, 5, 6, 7, 8, 9, 9]] # 重复9

    #遍历每个测试用例
    for i,num in enumerate(nums):
        print(f"{i+1}:{num}")
        res = test1(num)
        print(f"重复的数字是:{res}")
        if res != -1:
            count = num.count(res)
            print(f"数字{res}出现了{count}")
        print()

if __name__ == '__main__':
    main()

运行

题目

2:编写一个登录功能,使用序列化完成,并使出装饰器完成用户名和密码的记标次登录时间

  • 1.存储文件中的用户名和密码,使用序列化的形式--对象
  • 2.读取文件中的数据-反序列化的对象,
  • 3.用户输入登录的账户和密码,检验,完成登录操作
  • 4.装饰器记录登录的账户和密码,及登录时间

代码

python 复制代码
import pickle
from datetime import datetime
from functools import wraps

class User:
    def __init__(self, username,password):
        self.username = username
        self.password = password
        self.login_count = 0
        self.last_login_time = None

# 1.读取文件(反序列号):
def load_users():
    try:
        with open("users.txt","rb") as f:
            users = pickle.load(f)
            return users
    except  Exception as e:
        print(e)
        return {}

# 2.保存文件(序列化)
def save_users(users):
    try:
        with open("users.txt","wb") as f:
            pickle.dump(users,f)
            print(f"保存了{len(users)}个用户")
    except Exception as e:
        print(e)



# 3.登录
def verify_user(users,username,password):
    if username in users:
        if users[username].password == password:
            return True
    return False

# 4.装饰器记录登录信息
def login_logger(func):
    def wrapper(username, password,users):
        login_time = time.strftime("%Y-%m-%d %H:%M:%S")

        print(f"登录时间:{login_time}")
        print(f"用户名:{username}")
        print(f"密码:{'*'*len(password)}")

        result = func(username,password,users)

        if result:
            users[username].login_count += 1
            users[username].last_login_time = datetime.now()
            save_users(users)
            print(f"登录成功,")
            print(f"登录次数{username[username].login_count}")
        else:
            print(f"失败")

        return result
    return wrapper

# 登录  装饰器
@login_logger
def login(username,password,users):
    return verify_user(users,username,password)

def main():
    #1.读取文件(反序列化)
    users = load_users()
    print(f"加载了 {len(users)} 个用户\n")

    # 2.保存文件
    save_users(users)
    print(f"保存成功")

    # 3. 检验登录
    login("admin", "123456", users)
    login("admin", "wrongpassword", users)
    login("unknown", "123456", users)
    login("admin", "123456", users)

    print("所有用户:")
    for username, user in users.items():
        print(f"{username}:登录{user.login_count}次")


if __name__ == "__main__":
    main()

运行

相关推荐
夏幻灵3 小时前
JavaScript this 面试:五种绑定规则、优先级与常见面试陷阱
开发语言·javascript·面试
程序猿编码4 小时前
榨干 RTX5090 算力!Qwen3 专用单卡推理引擎,手写C++/CUDA 算子实现 MTP 推测解码
开发语言·c++·大模型推理·qwen3·多模态推理
bkspiderx5 小时前
Qt 插件机制:动态扩展应用功能的核心框架
开发语言·qt·元数据·qt 插件·qpluginloader
程序员老陆5 小时前
深入理解 C++ thread_local:线程私有存储的正确打开方式
开发语言·c++·程序设计
沐晓时光5 小时前
C语言入门,深入理解指针(3)
c语言·开发语言
码云数智-园园6 小时前
unique_ptr 还是 shared_ptr?C++ 智能指针选型与内存泄漏实战分析
java·开发语言
禾小西7 小时前
07丨Redis 哨兵机制:主库故障后,如何恢复服务?
java·开发语言·redis
我不是阵雨7 小时前
JDK 21虚拟线程Pinning陷阱:一文拔钉解困
java·开发语言
全栈练习生7 小时前
AI Agent 沙箱
python·ai
徐小黑ACG7 小时前
Golang 基础05 结构体struct
开发语言·算法·golang