1.给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),
可知至少存在一个重复的整数 假设只有一个重复的整数,请找出这个重复的数 -- 可以使用多种方式 -异或运算/集合
def find_duplicate_set(nums):
num_set = set()
for num in nums:
if num in num_set:
return num
num_set.add(num)
return -1
if __name__ == "__main__":
nums1 = [1, 3, 4, 2, 2]
nums2 = [3, 1, 3, 4, 2]
nums3 = [1, 2, 3, 4, 4]
print(f"数组{nums1}的重复数:{find_duplicate_set(nums1)}")
print(f"数组{nums2}的重复数:{find_duplicate_set(nums2)}")
print(f"数组{nums3}的重复数:{find_duplicate_set(nums3)}")

2.编写一个登录功能,使用序列化完成,并使用装饰器完成用户名和密码的记录及每次登录时间
- 1.存储文件中的用户名和密码,使用序列化的形式--对象
- 2.读取文件中的数据-反序列化的对象,
- 3.用户输入登录的账户和密码,检验,完成登录操作
- 4.装饰器记录登录的账户和密码,及登录时间
import pickle
import time
import hashlib
from datetime import datetime
class User:
def __init__(self, username, password):
self.username = username
self.password = self.encrypt_password(password)
@staticmethod
def encrypt_password(password):
salt = "login_serialize_2026"
return hashlib.md5((password + salt).encode("utf-8")).hexdigest()
def check_password(self, input_pwd):
return self.encrypt_password(input_pwd) == self.password
def login_logger(func):
def wrapper(*args, **kwargs):
result, username, input_pwd = func(*args, **kwargs)
login_time = datetime.now().strftime("%Y-%m-%d %H:%M:%S")
encrypted_pwd = User.encrypt_password(input_pwd)
log_content = f"时间:{login_time} | 用户名:{username} | 密码(加密):{encrypted_pwd} | 登录结果:{'成功' if result else '失败'}\n"
with open("login_log.txt", "a", encoding="utf-8") as f:
f.write(log_content)
return result
return wrapper
def save_users(users):
with open("users.pkl", "wb") as f:
pickle.dump(users, f)
def load_users():
try:
with open("users.pkl", "rb") as f:
return pickle.load(f)
except FileNotFoundError:
return {}
@login_logger
def login(username, input_pwd):
users = load_users()
if username not in users:
print(f"用户名 {username} 不存在!")
return False, username, input_pwd
user_obj = users[username]
if user_obj.check_password(input_pwd):
print(f"登录成功!欢迎 {username}")
return True, username, input_pwd
else:
print("密码错误!")
return False, username, input_pwd
if __name__ == "__main__":
username = input("请输入用户名:").strip()
password = input("请输入密码:").strip()
login(username, password)


3.测试位运算符,数字为23和-17的,并详细列出位运算的全过程
a = 23
b = -17
print(f"23 的二进制(8位补码):{bin(a)[2:].zfill(8)}")
print(f"-17的二进制(8位补码):11101111(手动计算)")
print(f"按位与:23 & -17 = {a & b}")
print(f"按位或:23 | -17 = {a | b}")
print(f"按位异或:23 ^ -17 = {a ^ b}")
print(f"按位取反~23 = {~a}")
print(f"按位取反~-17 = {~b}")
print(f"左移1位:23<<1 = {a << 1}")
print(f"左移1位:-17<<1 = {b << 1}")
print(f"右移1位:23>>1 = {a >> 1}")
print(f"右移1位:-17>>1 = {b >> 1}")

772



被折叠的 条评论
为什么被折叠?



