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)
相关推荐
倒头就睡的小比特2 天前
算法竞赛C++常用的STL
c++·算法
小羊没烦恼!2 天前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
猎头南楼2 天前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
旖旎夜光2 天前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark2 天前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her12 天前
并查集-听课笔记
笔记·算法·并查集
码流子2 天前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构
another heaven2 天前
【算法/C++ MD5算法能否逆解码?原理、C++实现与同类哈希算法对比】
c++·算法·哈希算法
wzdark2 天前
从算法设计模式看编程思维的抽象能力4
算法
2601_962218612 天前
万象生鲜系统称重自动多退少补算法解决生鲜非标品痛点
大数据·数据库·人工智能·python·算法