W03H02-算法分析
视频连接
知识点
将Unicode字符转换成字节串,好处:少占用内存,查找快一些。
作业:搜索2023年365天是否存在Pi前5000万位中
# 目标:搜索2023年365天是否存在Pi前5000万位中
import datetime
f = open("pi50.4.bin","rb")
dbuff = f.read()
# 将字符串都拼接在一起。第二行代码和第一行代码表示一个意思:都是将二进制转换成两位16进制,并且拼接在一起。
# encode方法将字符串编码为字节序列。
# s = ("".join(("%02x" % d for d in dbuff))).encode()
s = ("".join(("{:02x}".format(d) for d in dbuff))).encode()
d1 = datetime.date(2023,1,1)
found = 0
for n in range(365):
day = ((d1 + datetime.timedelta(days=n)).strftime("%Y%m%d")).encode()
if day in s:
found += 1
print(f"找到日期: {day.decode()}")
print(f"在Pi的前5000万位中找到的日期总数: {found}")
# .strftime("%Y%m%d") 的作用是将日期对象格式化为指定格式的字符串。
# 在这里,"%Y%m%d" 是一个日期格式化字符串的格式指令,具体含义如下:
# %Y 表示四位数的年份(例如:2023)
# %m 表示两位数的月份(例如:01 表示一月)
# %d 表示两位数的日期(例如:01 表示第一天)
# 综上,.strftime("%Y%m%d")意思就是将202111转换成标准格式20210101