ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

python练习4

python练习4 1.给定一个包含n1个整数的数组nums其数字在1到n之间(包含1和n),可知至少存在一个重复的整数 假设只有一个重复的整数请找出这个重复的数 -- 可以使用多种方式 -异或运算/集合def find_duplicate_xor(nums): 使用异或运算找出重复的数字。 时间复杂度: O(n) 空间复杂度: O(1) n len(nums) - 1 result 0 # 将数组中的所有元素进行异或 for num in nums: result ^ num # 将1到n的所有整数进行异或 for i in range(1, n 1): result ^ i return result # 示例 nums1 [1, 3, 4, 2, 2] print(f数组 {nums1} 中重复的数字是 (使用异或): {find_duplicate_xor(nums1)}) # 输出: 2 nums2 [3, 1, 3, 4, 2] print(f数组 {nums2} 中重复的数字是 (使用异或): {find_duplicate_xor(nums2)}) # 输出: 32.编写一个登录功能使用序列化完成并使用装饰器完成用户名和密码的记录及每次登录时间- 1.存储文件中的用户名和密码使用序列化的形式--对象- 2.读取文件中的数据-反序列化的对象- 3.用户输入登录的账户和密码检验完成登录操作- 4.装饰器记录登录的账户和密码及登录时间import pickle import datetime import os # 用户数据文件名 USER_DATA_FILE users.pkl LOGIN_LOG_FILE login_log.txt # --- 1. 存储文件中的用户名和密码使用序列化的形式 -- 对象 --- def initialize_users(): 初始化用户数据文件 users { admin: password123, user1: mysecret } with open(USER_DATA_FILE, wb) as f: pickle.dump(users, f) print(f已初始化用户数据到 {USER_DATA_FILE}) # --- 2. 读取文件中的数据 - 反序列化的对象 --- def load_users(): 从文件中加载用户数据 if not os.path.exists(USER_DATA_FILE): print(f用户数据文件 {USER_DATA_FILE} 不存在。) return {} with open(USER_DATA_FILE, rb) as f: return pickle.load(f) # --- 4. 装饰器记录登录的账户和密码及登录时间 --- def log_login(func): 装饰器记录登录信息 def wrapper(username, password): timestamp datetime.datetime.now().strftime(%Y-%m-%d %H:%M:%S) log_message f[{timestamp}] 尝试登录: 账户{username}, 密码{password}\n with open(LOGIN_LOG_FILE, a) as f: f.write(log_message) print(log_message.strip()) # 在控制台也打印一条消息 return func(username, password) return wrapper # --- 3. 用户输入登录的账户和密码检验完成登录操作 --- log_login def login(username, password): 登录函数 users load_users() if username in users and users[username] password: print(f登录成功欢迎 {username}。) return True else: print(f登录失败用户名或密码错误。) return False # --- 测试 --- if __name__ __main__: # 1. 初始化用户数据 initialize_users() # 2. 清空之前的登录日志方便观察 if os.path.exists(LOGIN_LOG_FILE): os.remove(LOGIN_LOG_FILE) print(\n--- 开始登录测试 ---) # 测试1: 成功登录 login(admin, password123) # 测试2: 密码错误 login(user1, wrong_password) # 测试3: 用户名不存在 login(new_user, any_password) # 测试4: 再次成功登录 login(user1, mysecret) print(f\n--- 登录日志已写入 {LOGIN_LOG_FILE} ---) # 可以手动打开 login_log.txt 文件查看内容3.测试位运算符数字为23和-17的并详细列出位运算的全过程23 -1723: 00000000 00000000 00000000 00010111-17: 11111111 11111111 11111111 11101111结果: 00000000 00000000 00000000 00000111 (十进制: 7)23 | -1723: 00000000 00000000 00000000 00010111-17: 11111111 11111111 11111111 11101111结果: 11111111 11111111 11111111 11111111 (十进制: -1)23 ^ -1723: 00000000 00000000 00000000 00010111-17: 11111111 11111111 11111111 11101111结果: 11111111 11111111 11111111 11111000 (十进制: -8)23和-1723: 00000000 00000000 00000000 0001011123: 11111111 11111111 11111111 11101000 (十进制: -24)
返回列表