一、题目要求
1、位运算:计算 56 及‑18 的所有位运算符结果,并使在注释中体现计算过程
2、完成文件读取功能,任意读取某个文件内容时,请编写装饰器,实现写出文件时增加当前系统时间,并打印至控制台最后一行
3、给定一个包含 n+1 个整数的数组 nums,其数字在 1 到 n 之间 (包含 1 和 n),可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数
4、完成登录系统,登录时数据使用序列化和反序列化
二、代码演示
1、位运算
a = 56
b = -18
print("a & b =", a & b)
print("a | b =", a | b)
print("a ^ b =", a ^ b)
print("~a =", ~a)
print("~b =", ~b)
print("a << 1 =", a << 1)
print("b << 1 =", b << 1)
print("a >> 1 =", a >> 1)
print("b >> 1 =", b >> 1)
2、文件
import time
def add_time(func):
def wrapper(*args,**kwargs):
res = func(*args,**kwargs)
now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
with open(args[0],'a',encoding="utf-8") as f:
f.write(f"\n{now}")
print(now)
return res
return wrapper
@add_time
def read_file(file_path):
try:
with open(file_path,"r",encoding="utf-8") as f:
content = f.read()
except FileNotFoundError:
with open(file_path,"w",encoding="utf-8") as f:
f.write("这是新建的测试文件")
content = "文件不存在,已自动创建test.txt"
return content
# 测试调用
if __name__ == "__main__":
print("\n文件读写测试")
content = read_file("test.txt")
print(content)
3、重复数
def find_duplicate(nums):
slow = nums[0]
fast = nums[0]
while True:
slow = nums[slow]
fast = nums[nums[fast]]
if slow == fast:
break
p1 = nums[0]
p2 = slow
while p1 != p2:
p1 = nums[p1]
p2 = nums[p2]
return p1
# 测试调用
if __name__ == "__main__":
print("\n找重复数字测试")
arr = [1,3,4,2,2]
print(find_duplicate(arr))
4、登录
import pickle
def save_user(users, filename="user.dat"):
with open(filename,"wb") as f:
pickle.dump(users,f)
def load_user(filename="user.dat"):
try:
with open(filename,"rb") as f:
return pickle.load(f)
except FileNotFoundError:
return {}
def register(username,password):
users = load_user()
if username in users:
return False
users[username] = password
save_user(users)
return True
def login(username,password):
users = load_user()
if users.get(username) == password:
return True
return False
# 测试调用
if __name__ == "__main__":
print("\n登录注册")
ret = register("admin","123456")
print("注册结果", ret)
print(login("admin","123456"))
print(login("admin","654321"))
三、运行结果



