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()

运行

相关推荐
疯狂的喵2 小时前
使用Flask快速搭建轻量级Web应用
jvm·数据库·python
Coder_preston2 小时前
Java集合框架详解
java·开发语言
smj2302_796826522 小时前
解决leetcode第3826题.最小分割分数问题
数据结构·python·算法·leetcode
多多*2 小时前
2026年最新 测试开发工程师相关 Linux相关知识点
java·开发语言·javascript·算法·spring·java-ee·maven
铁蛋AI编程实战2 小时前
ChatWiki 开源 AI 文档助手搭建教程:多格式文档接入,打造专属知识库机器人
java·人工智能·python·开源
程序员小远2 小时前
UI自动化测试用例管理平台搭建
自动化测试·软件测试·python·selenium·测试工具·职场和发展·测试用例
2301_763472582 小时前
实时系统下的C++编程
开发语言·c++·算法
小明_GLC2 小时前
Docker 构建镜像一直卡在下载 Python?
python·docker·容器
阿猿收手吧!2 小时前
【C++】深入理解C++ Atomic内存序:解决什么问题?怎么用?
开发语言·c++