1.位运算: 计算56及-18的所有位运算符结果,并使在注释中体现计算过程
python
复制代码
a = 56
b = -18
# 1. 按位与 &:对应位都为1则为1,否则0
# 56补码:00111000;-18补码:11101110 → 按位与:00101000(十进制40)
and_result = a & b
print(f"a & b = {and_result}") # 输出:40
# 2. 按位或 |:对应位有1则为1,否则0
# 56补码:00111000;-18补码:11101110 → 按位或:11111110(十进制-2)
or_result = a | b
print(f"a | b = {or_result}") # 输出:-2
# 3. 按位异或 ^:对应位不同则为1,否则0
# 56补码:00111000;-18补码:11101110 → 按位异或:11010110(十进制-42)
xor_result = a ^ b
print(f"a ^ b = {xor_result}") # 输出:-42
# 4. 按位取反 ~:0→1,1→0(结果 = -x -1)
# ~56:补码00111000 → 取反11000111(十进制-57)
a_result1 = ~a
print(f"~a = {a_result1}") # 输出:-57
# ~-18:补码11101110 → 取反00010001(十进制17)
b_result1 = ~b
print(f"~b = {b_result1}") # 输出:17
# 5. 左移 <<:高位丢弃,低位补0(相当于 ×2^n)
# 56 << 2:00111000 → 11100000(十进制224 = 56×4)
a_left2 = a << 2
print(f"a << 2 = {a_left2}") # 输出:224
# -18 << 2:11101110 → 10111000(十进制-72 = -18×4)
b_left2 = b << 2
print(f"b << 2 = {b_left2}") # 输出:-72
# 6. 右移 >>:正数高位补0,负数高位补1(相当于 ÷2^n,向下取整)
# 56 >> 2:00111000 → 00001110(十进制14 = 56÷4)
a_right2 = a >> 2
print(f"a >> 2 = {a_right2}") # 输出:14
# -18 >> 2:11101110 → 11111011(十进制-5 = -18÷4向下取整)
b_right2 = b >> 2
print(f"b >> 2 = {b_right2}") # 输出:-5

2.完成文件读取功能,任意读取某个文件内容时,请编写装饰器,实现写出文件时增加当前系统时间,并打印至控制台最后一行
python
复制代码
import time
from functools import wraps
def add_system_time(func):
"""装饰器:读取文件后追加当前系统时间,并重写文件"""
@wraps(func) # 保留原函数信息
def wrapper(file_path, *args, **kwargs):
# 1. 调用原函数读取文件内容
content = func(file_path, *args, **kwargs)
# 2. 获取当前系统时间(格式化:年-月-日 时:分:秒)
current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
# 3. 追加时间到内容末尾
new_content = content + f"\n\n文件读取时间:{current_time}"
# 4. 重写文件(覆盖原内容,增加时间)
with open(file_path, "w", encoding="utf-8") as f:
f.write(new_content)
# 5. 打印结果(最后一行是时间)
print("文件内容(含读取时间):")
print(new_content)
return new_content # 返回包含时间的内容
return wrapper
@add_system_time
def read_file(file_path):
"""读取文件内容的原始函数"""
try:
with open(file_path, "r", encoding="utf-8") as f:
return f.read().strip() # 读取并去除首尾空白
except FileNotFoundError:
print(f"错误:文件 {file_path} 不存在!")
return ""
# 测试:读取任意文件(如 test.txt)
read_file("test.txt")
3.给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),可知至少存在一个重复的整数 假设只有一个重复的整数,请找出这个重复的数
python
复制代码
def find_duplicate(nums):
"""
寻找数组中唯一的重复数(快慢指针法)
:param nums: 长度为n+1,元素1~n的数组
:return: 重复数
"""
# 1. 初始化快慢指针(慢指针走1步,快指针走2步)
slow = nums[0]
fast = nums[nums[0]]
# 2. 找到快慢指针相遇点(确定有环)
while slow != fast:
slow = nums[slow] # 慢指针走1步
fast = nums[nums[fast]] # 快指针走2步
# 3. 找到环的入口(重复数):慢指针回到起点,两者同步走1步
slow = 0
while slow != fast:
slow = nums[slow]
fast = nums[fast]
return slow
# 测试用例
test_cases = [
[1, 3, 4, 2, 2], # 输出:2
[3, 1, 3, 4, 2], # 输出:3
[1, 1], # 输出:1
[1, 2, 3, 4, 4, 5] # 输出:4
]
for case in test_cases:
print(f"数组 {case} 的重复数:{find_duplicate(case)}")
4.完成登录系统,登录时数据使用序列化和反序列化.
python
复制代码
import pickle
import os
# 存储用户数据的文件路径
USER_DATA_FILE = "user_data.pkl"
def serialize_data(data, file_path):
"""序列化:将Python对象写入文件"""
with open(file_path, "wb") as f:
pickle.dump(data, f) # 序列化并写入
def deserialize_data(file_path):
"""反序列化:从文件读取Python对象"""
if not os.path.exists(file_path):
return {} # 文件不存在时返回空字典
with open(file_path, "rb") as f:
return pickle.load(f) # 读取并反序列化
def register(username, password):
"""用户注册:序列化存储用户名和密码"""
# 1. 读取已有用户数据
user_data = deserialize_data(USER_DATA_FILE)
# 2. 校验用户名是否已存在
if username in user_data:
print(f"错误:用户名 {username} 已被注册!")
return False
# 3. 存储新用户(密码明文存储,实际项目需加密)
user_data[username] = password
serialize_data(user_data, USER_DATA_FILE)
print(f"注册成功!用户名:{username}")
return True
def login(username, password):
"""用户登录:反序列化验证用户名和密码"""
# 1. 读取用户数据
user_data = deserialize_data(USER_DATA_FILE)
# 2. 校验用户名和密码
if username not in user_data:
print(f"错误:用户名 {username} 不存在!")
return False
if user_data[username] != password:
print("错误:密码不正确!")
return False
print(f"登录成功!欢迎 {username}!")
return True
# 测试登录系统
if __name__ == "__main__":
# 注册用户
register("zhangsan", "123456")
register("lisi", "abcdef")
# 登录测试
login("zhangsan", "123456") # 成功
login("zhangsan", "654321") # 密码错误
login("wangwu", "111111") # 用户名不存在