学院:西安培华学院
班级: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()

338

被折叠的 条评论
为什么被折叠?



