【Python练习四】Python 算法与进阶特性实战:数组、序列化与位运算专项练习(3道经典练习带你巩固基础——看完包会)

第一题

题目:

给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),

可知至少存在一个重复的整数 假设只有一个重复的整数,请找出这个重复的数 -- 可以使用多种方式 -异或运算/集合

代码:

python 复制代码
# 方法1:集合查重(集合元素唯一性)
def findDuplicate1(nums):
    num_set = set()
    for num in nums:
        if num in num_set:  # 已存在说明是重复数
            return num
        num_set.add(num)
    return -1 # 防止nums没有重复整数报错
 
# 方法2:异或运算
def findDuplicate2(nums):
    res = 0
    # 异或 1~n 的所有数字
    for i in range(1,len(nums)):
        res ^= i
    # 异或数组中所有元素
    for num in nums:
        res ^= num
    return res
 
# 方法3:排序后相邻比对
def findDuplicate3(nums):
    nums.sort()  # 排序后重复数会相邻
    for i in range(1, len(nums)):
        if nums[i] == nums[i-1]:
            return nums[i]
    return -1
 
# 测试用例
nums = [1,2,5,6,7,8,4,3,2]
print("集合方法找到重复数:", findDuplicate1(nums))
print("异或方法找到重复数:", findDuplicate2(nums))
print("排序方法找到重复数:", findDuplicate3(nums))

运行结果:


第二题

题目:

编写一个登录功能,使用序列化完成,并使用装饰器完成用户名和密码的记录及每次登录时间

  • 1.存储文件中的用户名和密码,使用序列化的形式--对象
  • 2.读取文件中的数据-反序列化的对象,
  • 3.用户输入登录的账户和密码,检验,完成登录操作
  • 4.装饰器记录登录的账户和密码,及登录时间

代码:

python 复制代码
import pickle
import time
import os 
from functools import wraps
 
# 定义用户数据文件
USER_FILE = "users.pkl"
 
# 装饰器:记录登录信息到日志
def log_login(func):
    @wraps(func)
    def wrapper(username, password):
        # 获取格式化的登录时间
        login_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        # 追加写入登录日志(包含用户名、密码、登录时间)
        with open("login_log.txt", "a+", encoding="utf-8") as f:
            f.write(f"用户: {username}, 密码: {password}, 登录时间: {login_time}\n")
        return func(username, password)
    return wrapper
 
# 初始化用户数据文件
if not os.path.exists(USER_FILE):
    with open(USER_FILE, "wb") as f:
        pickle.dump({"admin": "123456"}, f)
 
# 读取用户数据(反序列化)
def load_users():
    with open(USER_FILE, "rb") as f:
        return pickle.load(f)
 
# 保存用户数据(序列化)
def save_users(users):
    with open(USER_FILE, "wb") as f:
        pickle.dump(users, f)
 
# 注册功能
def register(username, password):
    users = load_users()
    if username in users:
        print("用户名已存在!")
        return False
    users[username] = password
    save_users(users)
    print(f"用户 {username} 注册成功!")
    return True
 
# 登录功能
@log_login
def login(username, password):
    users = load_users()
    if username in users and users[username] == password:
        print(f"用户 {username} 登录成功!")
        return True
    print("用户名或密码错误!")
    return False
 
# 启动交互界面
while True:
    print("\n1. 注册  2. 登录  3. 退出")
    choice = input("请选择操作: ")
    if choice == "1":
        username = input("请输入用户名: ")
        password = input("请输入密码: ")
        register(username, password)
    elif choice == "2":
        username = input("请输入用户名: ")
        password = input("请输入密码: ")
        login(username, password)
    elif choice == "3":
        break
    else:
        print("输入错误,请重新选择!")

运行结果:


第三题

题目:

测试位运算符,数字为23和-17的,并详细列出位运算的全过程

代码:

python 复制代码
a = 23
b = -17
 
# 打印二进制补码
def print_bin(num, name):
    # 获取32位二进制补码(&0xFFFFFFFF确保显示32位)
    bin_str = bin(num & 0xFFFFFFFF)[2:].zfill(32)
    print(f"{name} ({num}) 的32位二进制补码: {bin_str}")
 
# 打印原始数字的补码
print_bin(a, "a=23")
print_bin(b, "b=-17")
 
# 位与运算(对应位都为1则为1)
print("\n1. 位与 &: a & b =", a & b)
print_bin(a & b, "结果")
 
# 位或运算(对应位有一个为1则为1)
print("\n2. 位或 |: a | b =", a | b)
print_bin(a | b, "结果")
 
# 异或运算(对应位不同则为1)
print("\n3. 异或 ^: a ^ b =", a ^ b)
print_bin(a ^ b, "结果")
 
# 取反运算(按位取反,0变1/1变0)
print("\n4. 取反 ~: ~a =", ~a, " ~b =", ~b)
print_bin(~a & 0xFFFFFFFF, "~a结果")
print_bin(~b & 0xFFFFFFFF, "~b结果")
 
# 左移运算(左移n位,右侧补0)
print("\n5. 左移 <<: a << 2 =", a << 2, " b << 2 =", b << 2)
print_bin(a << 2, "a<<2结果")
print_bin(b << 2, "b<<2结果")
 
# 右移运算(正数左补0,负数左补1)
print("\n6. 右移 >>: a >> 2 =", a >> 2, " b >> 2 =", b >> 2)
print_bin(a >> 2, "a>>2结果")
print_bin(b >> 2, "b>>2结果")

运行结果:


相关推荐
阿猿收手吧!1 小时前
【C++】模块:告别头文件新时代
开发语言·c++
星火开发设计1 小时前
虚析构函数:解决子类对象的内存泄漏
java·开发语言·前端·c++·学习·算法·知识
t198751281 小时前
MATLAB水声信道建模:方法、实现与应用
开发语言·matlab
maplewen.1 小时前
C++ 多态原理深入理解
开发语言·c++·面试
龙山云仓1 小时前
No152:AI中国故事-对话祖冲之——圆周率与AI精度:数学直觉与极限探索
大数据·开发语言·人工智能·python·机器学习
琅琊榜首20202 小时前
AI+Python实操指南:用编程赋能高质量网络小说创作
开发语言·人工智能·python
Faker66363aaa2 小时前
基于YOLO13-C3k2-Strip的神经退行性疾病MRI影像自动识别
python
tbRNA2 小时前
C++ string类
开发语言·c++
ccLianLian2 小时前
算法基础·C++常用操作
开发语言·数据结构·c++