Python_work4

复制代码
位运算: 计算56及-18的所有位运算符结果,并使在注释中体现计算过程
python 复制代码
# 定义两个操作数
a = 56
b = -18

# -------------------------- 1. 按位与(&):对应位都为1时结果为1,否则为0 --------------------------
# 56的32位二进制:00000000 00000000 00000000 00111000
# -18的32位补码:11111111 11111111 11111111 11101110
# 按位与计算:
#   00000000 00000000 00000000 00111000
# & 11111111 11111111 11111111 11101110
# = 00000000 00000000 00000000 00101000 (对应十进制40)
bit_and = a & b
print(f"56 & -18 = {bit_and}")

# -------------------------- 2. 按位或(|):对应位有一个为1时结果为1,否则为0 --------------------------
# 56的32位二进制:00000000 00000000 00000000 00111000
# -18的32位补码:11111111 11111111 11111111 11101110
# 按位或计算:
#   00000000 00000000 00000000 00111000
# | 11111111 11111111 11111111 11101110
# = 11111111 11111111 11111111 11111110 (对应十进制-2)
bit_or = a | b
print(f"56 | -18 = {bit_or}")

# -------------------------- 3. 按位异或(^):对应位不同时结果为1,相同时为0 --------------------------
# 56的32位二进制:00000000 00000000 00000000 00111000
# -18的32位补码:11111111 11111111 11111111 11101110
# 按位异或计算:
#   00000000 00000000 00000000 00111000
# ^ 11111111 11111111 11111111 11101110
# = 11111111 11111111 11111111 11010110 (对应十进制-42)
bit_xor = a ^ b
print(f"56 ^ -18 = {bit_xor}")

# -------------------------- 4. 按位取反(~):对每一位取反(0变1,1变0) --------------------------
# 注意:Python中~x = -(x+1),基于无限精度补码
# (1)~56
# 56的二进制:...00000000 00111000
# 按位取反:...11111111 11000111 (对应十进制-57,即 -(56+1))
bit_not_a = ~a
print(f"~56 = {bit_not_a}")

# (2)~(-18)
# -18的补码:...11111111 11101110
# 按位取反:...00000000 00010001 (对应十进制17,即 -(-18+1) = 17)
bit_not_b = ~b
print(f"~(-18) = {bit_not_b}")

# -------------------------- 5. 左移(<<):整体左移n位,右侧补0,等价于乘以2^n --------------------------
# (1)56 << 1:左移1位,等价于56*2=112
# 56二进制:00111000 → 左移1位:01110000(十进制112)
left_shift_a1 = a << 1
print(f"56 << 1 = {left_shift_a1}")

# (2)56 << 2:左移2位,等价于56*4=224
left_shift_a2 = a << 2
print(f"56 << 2 = {left_shift_a2}")

# (3)-18 << 1:左移1位,等价于-18*2=-36
# -18补码:...11101110 → 左移1位:...11011100(十进制-36)
left_shift_b1 = b << 1
print(f"-18 << 1 = {left_shift_b1}")

# (4)-18 << 2:左移2位,等价于-18*4=-72
left_shift_b2 = b << 2
print(f"-18 << 2 = {left_shift_b2}")

# -------------------------- 6. 右移(>>):正数左补0,负数左补1,等价于整除2^n --------------------------
# (1)56 >> 1:右移1位,等价于56//2=28
# 56二进制:00111000 → 右移1位:00011100(十进制28)
right_shift_a1 = a >> 1
print(f"56 >> 1 = {right_shift_a1}")

# (2)56 >> 2:右移2位,等价于56//4=14
right_shift_a2 = a >> 2
print(f"56 >> 2 = {right_shift_a2}")

# (3)-18 >> 1:右移1位,等价于-18//2=-9(负数右移补1,结果向下取整)
# -18补码:...11101110 → 右移1位:...11110111(十进制-9)
right_shift_b1 = b >> 1
print(f"-18 >> 1 = {right_shift_b1}")

# (4)-18 >> 2:右移2位,等价于-18//4=-5(-18/4=-4.5,向下取整为-5)
right_shift_b2 = b >> 2
print(f"-18 >> 2 = {right_shift_b2}")
复制代码
完成文件读取功能,任意读取某个文件内容时,请编写装饰器,实现写出文件时增加当前系统时间,并打印至控制台最后一行
python 复制代码
import datetime

def add_datetime_to_file(func):
    def wrapper(file_path, write_path="output_with_time.txt"):
        original_content = func(file_path)
        current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        new_content = f"{original_content}\n\n===== 当前系统时间:{current_time} ====="
        try:
            with open(write_path, "w+", encoding="utf-8") as f:
                f.write(new_content)
            print(f"带时间的内容已成功写入:{write_path}")
        except Exception as e:
            print(f"写入文件失败:{e}")
            return original_content
        print(f"\n控制台打印:当前系统时间 -> {current_time}")
        return new_content
    return wrapper


@add_datetime_to_file
def read_file_content(file_path):
    with open(file_path, "r", encoding="utf-8") as f:
        content = f.read()
    print(f"成功读取原始文件:{file_path}")
    return content

read_file_content("../test.txt")
复制代码
给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),可知至少存在一个重复的整数 假设只有一个重复的整数,请找出这个重复的数
python 复制代码
def find_duplicate_binary(nums):
    left = 1
    right = len(nums) - 1  # 数组长度n+1,元素范围1~n
    
    while left < right:
        mid = (left + right) // 2  # 中间值(不是数组索引,是元素值)
        count = 0
        # 统计数组中<=mid的元素个数
        for num in nums:
            if num <= mid:
                count += 1
        
        # 判断重复数所在区间
        if count > mid:
            right = mid  # 重复数在左半区间
        else:
            left = mid + 1  # 重复数在右半区间
    
    return left  # left==right时,即为重复数

# 测试示例
nums1 = [1,3,4,2,2]
nums2 = [3,1,3,4,2]
print(f"二分查找法找重复数(nums1):{find_duplicate_binary(nums1)}")
print(f"二分查找法找重复数(nums2):{find_duplicate_binary(nums2)}")
复制代码
完成登录系统,登录时数据使用序列化和反序列化.
python 复制代码
import pickle
import os

# 定义用户数据文件路径
USER_DATA_FILE = "users.data"

# 定义用户类(存储用户名和密码)
class User:
    def __init__(self, username, password):
        self.username = username
        self.password = password

    def __str__(self):
        return f"用户:{self.username}"

# -------------------------- 序列化/反序列化工具函数 --------------------------
def save_users(users):
    """将用户字典序列化并写入文件"""
    try:
        with open(USER_DATA_FILE, "wb") as f:  # 二进制模式写入(pickle要求)
            pickle.dump(users, f)
        print("用户数据已保存!")
    except Exception as e:
        print(f"保存用户数据失败:{e}")

def load_users():
    """从文件中反序列化读取用户字典"""
    # 如果文件不存在,返回空字典
    if not os.path.exists(USER_DATA_FILE):
        return {}
    try:
        with open(USER_DATA_FILE, "rb") as f:  # 二进制模式读取(pickle要求)
            users = pickle.load(f)
        print("用户数据已加载!")
        return users
    except Exception as e:
        print(f"加载用户数据失败:{e}")
        return {}

# -------------------------- 登录/注册功能 --------------------------
def register():
    """用户注册功能"""
    # 加载已有用户数据
    users = load_users()
    
    # 获取注册信息
    username = input("请输入注册用户名:").strip()
    # 判断用户名是否已存在
    if username in users:
        print(f"错误:用户名「{username}」已存在!")
        return
    
    password1 = input("请输入注册密码:").strip()
    password2 = input("请再次输入密码:").strip()
    
    # 验证两次密码是否一致
    if password1 != password2:
        print("错误:两次输入的密码不一致!")
        return
    
    # 创建新用户对象
    new_user = User(username, password1)
    # 添加到用户字典(key=用户名,value=用户对象)
    users[username] = new_user
    # 序列化保存到文件
    save_users(users)
    print(f"恭喜!用户「{username}」注册成功!")

def login():
    """用户登录功能"""
    # 加载已有用户数据
    users = load_users()
    if not users:
        print("暂无注册用户,请先注册!")
        return
    
    # 获取登录信息
    username = input("请输入用户名:").strip()
    password = input("请输入密码:").strip()
    
    # 验证用户名是否存在
    if username not in users:
        print(f"错误:用户名「{username}」不存在!")
        return
    
    # 验证密码是否正确
    user = users[username]
    if user.password == password:
        print(f"登录成功!欢迎你,{user.username}!")
    else:
        print("错误:密码输入错误!")

# -------------------------- 主程序入口 --------------------------
def main():
    while True:
        # 打印菜单
        print("\n===== 登录系统 =====")
        print("1. 用户注册")
        print("2. 用户登录")
        print("3. 退出系统")
        choice = input("请选择功能(1/2/3):").strip()
        
        # 处理用户选择
        if choice == "1":
            register()
        elif choice == "2":
            login()
        elif choice == "3":
            print("感谢使用,再见!")
            break
        else:
            print("无效选择,请输入1/2/3!")

if __name__ == "__main__":
    main()
相关推荐
大学生资源网2 小时前
java毕业设计之儿童福利院管理系统的设计与实现(源码+)
java·开发语言·spring boot·mysql·毕业设计·源码·课程设计
JasmineWr2 小时前
JVM栈空间的使用和优化
java·开发语言
爱笑的眼睛112 小时前
从 Seq2Seq 到 Transformer++:深度解构与自构建现代机器翻译核心组件
java·人工智能·python·ai
Poetinthedusk2 小时前
C#实现图片统一位深
开发语言·c#
yaoh.wang2 小时前
力扣(LeetCode) 88: 合并两个有序数组 - 解法思路
python·程序人生·算法·leetcode·面试·职场和发展·双指针
执笔论英雄3 小时前
【RL】slime创建actor的流程
python
吴佳浩 Alben3 小时前
Python入门指南(四)
开发语言·后端·python
一然明月3 小时前
QT之基础控件
开发语言·qt
小智RE0-走在路上3 小时前
Python学习笔记(8) --函数的多返回值,不同传参,匿名函数
笔记·python·学习