欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 旅游 > python欧鹏第四次作业

python欧鹏第四次作业

2025/6/20 4:54:30 来源:https://blog.csdn.net/2301_78352567/article/details/148746412  浏览:    关键词:python欧鹏第四次作业

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

a = 56  # 十进制56,二进制:00111000(8位表示)
b = -18  # 十进制-18,二进制补码:11101110(计算:18的原码00010010,取反11101101,加1得11101110)# 1. 按位与(&):对应二进制位都为1时结果为1
and_result = a & b
print(f"按位与(&)结果:{and_result}")  # 输出:40
# 计算过程:
# a的二进制:00111000
# b的二进制:11101110
# 按位与结果:00101000(十进制40)# 2. 按位或(|):对应二进制位有一个为1时结果为1
or_result = a | b
print(f"按位或(|)结果:{or_result}")  # 输出:254
# 计算过程:
# a的二进制:00111000
# b的二进制:11101110
# 按位或结果:11111110(十进制254)# 3. 按位异或(^):对应二进制位不同为1,相同为0
xor_result = a ^ b
print(f"按位异或(^)结果:{xor_result}")  # 输出:214
# 计算过程:
# a的二进制:00111000
# b的二进制:11101110
# 按位异或结果:11010110(十进制214)# 4. 按位取反(~):所有二进制位取反(1变0,0变1)
not_a = ~a
not_b = ~b
print(f"按位取反(~a)结果:{not_a}")  # 输出:-57
print(f"按位取反(~b)结果:{not_b}")  # 输出:17
# ~a计算过程:
# a的二进制:00111000 → 取反后11000111(补码)→ 转换为十进制:-57
# ~b计算过程:
# b的二进制:11101110 → 取反后00010001(补码)→ 转换为十进制:17# 5. 左移(<<):a左移2位,右侧补0
left_shift = a << 2
print(f"左移(<<2)结果:{left_shift}")  # 输出:224
# 计算过程:
# a的二进制:00111000 → 左移2位后11100000(十进制224)# 6. 右移(>>):b右移2位,左侧补符号位(负数补1)
right_shift = b >> 2
print(f"右移(>>2)结果:{right_shift}")  # 输出:-5
# 计算过程:
# b的二进制:11101110 → 右移2位后11111011(补码)→ 转换为十进制:-5

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

import time
from functools import wrapsdef add_timestamp(func):"""装饰器:读取文件后在末尾添加当前时间并打印"""@wraps(func)def wrapper(file_path):content = func(file_path)# 获取当前系统时间(格式:年-月-日 时:分:秒)timestamp = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())# 写入文件(追加模式)with open(file_path, 'a', encoding='utf-8') as f:f.write(f"\n# 最后修改时间:{timestamp}")# 打印到控制台print(content + f"\n# 最后修改时间:{timestamp}")return contentreturn wrapper@add_timestamp
def read_file(file_path):"""读取文件内容"""try:with open(file_path, 'r', encoding='utf-8') as f:return f.read()except FileNotFoundError:return f"文件 {file_path} 不存在"# 示例用法(假设存在test.txt文件)
# read_file("test.txt")

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

def find_duplicate(nums):"""在1~n的数组中查找唯一重复数字(数组长度n+1)方法:快慢指针(Floyd判圈算法)"""slow, fast = nums[0], nums[nums[0]]# 找到快慢指针相遇点while slow != fast:slow = nums[slow]fast = nums[nums[fast]]# 从起点和相遇点同时出发,再次相遇的位置即为重复数slow = 0while slow != fast:slow = nums[slow]fast = nums[fast]return slow# 示例
nums = [1, 3, 4, 2, 2]
print(f"重复数字:{find_duplicate(nums)}")  # 输出:2

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

import json
import os
from getpass import getpassclass LoginSystem:def __init__(self, data_file="users.json"):self.data_file = data_fileself.users = self._load_users()  # 反序列化用户数据def _load_users(self):"""从文件反序列化用户数据,不存在则初始化空字典"""if os.path.exists(self.data_file):with open(self.data_file, 'r', encoding='utf-8') as f:try:return json.load(f)except json.JSONDecodeError:return {}return {}def _save_users(self):"""将用户数据序列化到文件"""with open(self.data_file, 'w', encoding='utf-8') as f:json.dump(self.users, f, ensure_ascii=False, indent=2)def register(self):"""用户注册"""username = input("请输入注册用户名:")if username in self.users:print("用户名已存在!")return Falsepassword = getpass("请输入密码:")self.users[username] = passwordself._save_users()print(f"注册成功,欢迎 {username}!")return Truedef login(self):"""用户登录"""username = input("请输入用户名:")if username not in self.users:print("用户名不存在!")return Falsepassword = getpass("请输入密码:")if self.users[username] == password:print(f"登录成功,欢迎 {username}!")return Trueelse:print("密码错误!")return Falsedef run(self):"""系统主流程"""while True:print("\n===== 登录系统 =====")print("1. 注册")print("2. 登录")print("3. 退出")choice = input("请选择操作(1-3):")if choice == '1':self.register()elif choice == '2':self.login()elif choice == '3':print("感谢使用,再见!")breakelse:print("无效选择,请重新输入!")# 运行系统
if __name__ == "__main__":system = LoginSystem()system.run()

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词