第四次作业

学院:西安培华学院

班级:20250310培华python1班

姓名:陈豪喆

第四次作业

一、未每日一讲的同学补交每日一讲录制视频链接,和之前提交作业一致,需发布至CSDN博客

录制: 每日一讲– 继承.py
录制文件:https://meeting.tencent.com/crm/N8Lm9DMwaf

1.位运算: 计算56及-18的所有位运算符结果,并使在注释中体现计算过程

实现代码:

a = 56
b = -18
 
# 按位与 &
# 56 的二进制(补码,正数补码同原码):00111000
# -18 的二进制(补码):先转原码 10010010,取反 11101101,加1 11101110
# 按位与结果:00101000(十进制 40)
bit_and = a & b
print("按位与结果:", bit_and)  # 输出 40
 
# 按位或 |
# 按位或运算,对应位有一个1则为1
# 结果二进制:11111110(十进制 -2 ,Python 中按补码规则显示)
bit_or = a | b
print("按位或结果:", bit_or)  # 输出 -2
 
# 按位异或 ^
# 对应位不同则为1
# 结果二进制:11010110(十进制 -42 ,Python 中按补码规则显示)
bit_xor = a ^ b
print("按位异或结果:", bit_xor)  # 输出 -42
 
# 按位取反 ~ 
# 对 56 取反:~56 = - (56 + 1) = -57 (按补码运算规则)
bit_not_a = ~a
print("56 按位取反结果:", bit_not_a)  # 输出 -57
# 对 -18 取反:~(-18) = 18 - 1 = 17 (按补码运算规则)
bit_not_b = ~b
print("-18 按位取反结果:", bit_not_b)  # 输出 17
 
# 左移 << 
# 56 << 1 :二进制左移1位,相当于乘以2,56 * 2 = 112
left_shift_a = a << 1
print("56 左移1位结果:", left_shift_a)  # 输出 112
# -18 << 1 :二进制左移1位,相当于乘以2,-18 * 2 = -36
left_shift_b = b << 1
print("-18 左移1位结果:", left_shift_b)  # 输出 -36
 
# 右移 >> 
# 56 >> 1 :二进制右移1位,相当于除以2取整,56 // 2 = 28
right_shift_a = a >> 1
print("56 右移1位结果:", right_shift_a)  # 输出 28
# -18 >> 1 :二进制右移1位(补码运算),结果为 -9 
right_shift_b = b >> 1
print("-18 右移1位结果:", right_shift_b)  # 输出 -9


2.完成文件读取功能,任意读取某个文件内容时,请编写装饰器,实现写出文件时增加当前系统时间,并打印至控制台最后一行

实现代码:

import time
import functools
 
 
def add_time_decorator(func):
    @functools.wraps(func)
    def wrapper(*args, **kwargs):
        result = func(*args, **kwargs)
        current_time = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
        with open(args[0], "a") as f:
            f.write(f"\n{current_time}")
        print(current_time)
        return result
    return wrapper
 
 
@add_time_decorator
def write_file(file_path, content):
    with open(file_path, "w") as f:
        f.write(content)
    return "写入完成"
 
 
# 测试
write_file("test.txt", "这是测试内容")


3.给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),可知至少存在一个重复的整数 假设只有一个重复的整数,请找出这个重复的数

实现代码:

def findDuplicate(nums):
    slow, fast = 0, 0
    # 找相遇点
    while True:
        slow = nums[slow]
        fast = nums[nums[fast]]
        if slow == fast:
            break
    # 找入口(重复数)
    slow = 0
    while slow != fast:
        slow = nums[slow]
        fast = nums[fast]
    return slow


4.完成登录系统,登录时数据使用序列化和反序列化

实现代码:

import pickle
import os
 
# 注册功能
def register():
    username = input("请输入用户名:")
    password = input("请输入密码:")
    user_data = {"username": username, "password": password}
    # 序列化并写入文件
    with open("user_info.pickle", "wb") as f:
        pickle.dump(user_data, f)
    print("注册成功!")
 
# 登录功能
def login():
    if not os.path.exists("user_info.pickle"):
        print("请先注册!")
        return
    # 从文件反序列化读取用户信息
    with open("user_info.pickle", "rb") as f:
        user_data = pickle.load(f)
    input_username = input("请输入用户名:")
    input_password = input("请输入密码:")
    if input_username == user_data["username"] and input_password == user_data["password"]:
        print("登录成功!")
    else:
        print("用户名或密码错误!")
 
# 测试
register()
login()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值