1.题目讲解
python经典题目--素数的判断
2.位运算
题目:计算56及-18的所有位运算符结果,并使在注释中体现计算过程
python
a = 56
b = -18
# 56 二进制:00111000
# -18 补码:计算机负数用补码存储,18=00010010,取反11101101,+1 → 11101110
# 按位与 & :两位都为1结果才是1
res_and = a & b
"""
00111000
11101110
--------
00101000 → 40
"""
# 按位或 |:任意一位为1则为1
res_or = a | b
"""
00111000
11101110
--------
11111110 → -2
"""
# 按位异或 ^:两位不同为1,相同为0
res_xor = a ^ b
"""
00111000
11101110
--------
11010110 → -42
"""
# 按位取反 ~:按位全部取反,公式 ~x = -x-1
res_tilde_a = ~a # ~56 = -56‑1 = -57
res_tilde_b = ~b # ~(-18) = 17
# 左移 << 二进制整体向左移动,低位补0
res_a_left = a << 1 # 56<<1 00111000 <<1 → 01110000 =112
res_b_left = b << 1 # -18 <<1 =‑36
# 右移 >> 整体右移,符号位填充
res_a_right = a >>1 #56>>1 → 00011100 =28
res_b_right = b >>1 #‑18 >>1 =‑9
print(f"56 & -18 = {res_and}")
print(f"56 | -18 = {res_or}")
print(f"56 ^ -18 = {res_xor}")
print(f"~56 = {res_tilde_a} , ~-18 = {res_tilde_b}")
print(f"56 <<1 = {res_a_left}, -18<<1 = {res_b_left}")
print(f"56 >>1 = {res_a_right}, -18>>1 = {res_b_right}")
3.完成文件读取功能
题目:任意读取某个文件内容时,请编写装饰器,实现写出文件时增加当前系统时间,并打印至控制台最后一行
python
from datetime import datetime
# 装饰器:给写文件功能增加时间
def add_time_decorator(func):
def wrapper(*args,**kwargs):
# 执行原函数
result = func(*args,**kwargs)
now = datetime.now()
time_str = str(now)
# args[0] 文件名
filename = args[0]
# 追加写入时间到文件最后一行
with open(filename,"a",encoding="utf‑8") as f:
f.write(f"\n{time_str}")
# 控制台打印时间
print(f"【系统时间】{time_str}")
return result
return wrapper
# 读取文件函数
def read_file(filename):
with open(filename,"r",encoding="utf‑8") as f:
content = f.read()
return content
# 被装饰的写文件函数
@add_time_decorator
def write_file(filename,content):
with open(filename,"w",encoding="utf‑8") as f:
f.write(content)
# 测试
# write_file("test.txt","测试文本内容")
# print(read_file("test.txt"))
4.给定一个包含n+1个整数的数组nums
题目: 给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),可知至少存在一个重复的整数 假设只有一个重复的整数,请找出这个重复的数
python
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
#测试
print(find_duplicate([2,2,2,2,2]))
5.完成登录系统
题目:登录时数据使用序列化和反序列化
python
import pickle
USER_FILE = "user.data"
# 注册:序列化保存用户账号密码
def register(username,password):
user_data = {"username":username,"password":password}
with open(USER_FILE,"wb") as f:
pickle.dump(user_data,f) #序列化写入文件
print("注册成功")
# 登录:反序列化读取文件,校验账号密码
def login(input_user,input_pwd):
try:
with open(USER_FILE,"rb") as f:
user = pickle.load(f) #反序列化,读取数据
if user["username"] == input_user and user["password"] == input_pwd:
return True,"登录成功"
else:
return False,"账号或密码错误"
except FileNotFoundError:
return False,"无用户数据,请先注册"
# --------测试演示--------
# register("admin","123456")
# flag,msg = login("admin","123456")
# print(msg)
# flag,msg = login("admin","666")
# print(msg)