如何实现用户的历史记录功能
原始代码如下:
from random import randint
N = randint(0, 100)
def guess(k):
if k == N:
print('猜对了')
return True
elif k < N:
print('猜小了')
else:
print('猜大了')
return False
while True:
line = input("please input a number:")
if line.isdigit():
k = int(line)
if guess(k):
break
我们希望保存最近 5 次猜的数字,之前的就被删除
解决方案:
使用容量为 n (本例中 n=5) 的队列存储历史记录
使用标准库中的 deque,它是一个双端循环队列
from random import randint
from collections import deque
history = deque([], 5)
N = randint(0, 100)
def guess(k):
if k == N:
print('猜对了')
return True
elif k < N:
print('猜小了')
else:
print('猜大了')
return False
while True:
line = input("please input a number:")
if line.isdigit():
k = int(line)
history.append(k)
if guess(k):
break
elif line == 'history' or line == 'h?':
print(history)
若我们还希望 程序下次运行时,可以查看之前的历史记录,就需要将 队列对象 保存到磁盘,可以使用 pickle
pickle 可以将任意类型的数据(包括 数字型、列表、字典、字符串等)保存到磁盘文件,在需要的时候还可以正常读回为原数据
解决方案:程序退出前,可以使用 pickle 将队列对象存入文件,再次运行程序时将其导入
pickle 的用法:
写数据:
import pickle
data = [1, 2, 3, 4]
with open('data.dat', 'wb') as f:
pickle.dump(data, f)
读数据:
import pickle
with open('data.dat', 'rb') as f:
data = pickle.load(f)
print(data)