python拓展

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)
相关推荐
TAN-90°-1 小时前
Deep Learning for Computer Vision——Image Classification with Linear Classifiers
python·深度学习·算法·计算机视觉·线性回归
阿pin2 小时前
Java随笔-红黑树
java·python·算法·红黑树
Hi李耶2 小时前
【LeetCode】17.电话号码的字母组合
算法·leetcode·职场和发展
江畔柳前堤10 小时前
大语言模型分布式训练:从并行策略到万卡工程的系统梳理
人工智能·分布式·深度学习·算法·目标检测·机器学习·语言模型
Forever Nore11 小时前
LeetCode 4 寻找两个正序数组的中位数 - 二分
算法·leetcode
罗西的思考13 小时前
【OpenClaw具身硬件】MiniClaw 阅读笔记---(1)基础
人工智能·算法·机器学习
蛋先生DX14 小时前
大模型参数存储格式揭秘:BF不是男朋友
深度学习·算法·llm
爱跳舞的烤冷面14 小时前
自学嵌入式第22天(数据结构——哈希)
数据结构·算法·哈希算法
猎嘤一号14 小时前
博弈论(Game Theory)的理论、算法与工程
人工智能·算法·安全·博弈论