Python保存并浏览用户的历史记录


Posted in Python onApril 29, 2022

1、如何实现用户的历史记录功能(最多n条)

实际案例:

很多应用程序都有浏览用户的历史记录的功能,

例如:

浏览器可以查看最近访问过的网页;

视频播放器可以查看最近播放过视频文件;

Shell可以查看用户输入过的命名;

... ...

现在我们制作了一个简单的猜数字的小游戏,添加历史记录功能,显示用户最近猜过的数字,如何实现?

注:历史记录不能是无限条需要加限定。只显示最近5次的历史记录,其它的抛弃掉。

解决方案:

使用容量为n的队列存储历史记录

使用标准库collections中的deque,它是一个双端循环队列。

程序退出前,可以使用pickle将队列对象存入文件,再次运行程序时将其导入。

2、代码演示

(1)deque双端队列简单使用

from collections import deque
 
# 创建带有容量的队列
q = deque([], 5)
# 一次添加多个元素
a = [1, 2, 3, 4, 5]
q.extend(a)
print(q)
# 添加第6个元素,查看队列时发现第1个元素已经被挤出去了
q.append(6)
print(q)

(2)pickle保存对象到文件中或读取文件中对象

q = deque([1, 2, 3, 4, 5], maxlen=5)
# 存储对象到文件
pickle.dump(q, open('history', 'wb'))
# 读取文件中对象
q2 = pickle.load(open('history', 'rb'))
print(q2)

(3)实现猜数字游戏的历史记录

from random import randint
from collections import deque
import pickle
# 猜数字游戏,首先产生一个0到100数字,然后让用户猜
N = randint(0, 100)
print('答案:' + str(N))
# 初始化队列,容量为5
history = deque([], 5)
# 读取文件中的历史记录
history = pickle.load(open('history', 'rb'))
print(history)
def guess(k):
    if k == N:
        print('right')
        return True
    if k < N:
        print('%s is less-than N' % k)
    else:
        print('%s is greater-than N' % k)
    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(list(history))
# 将历史记录保存到文件中
pickle.dump(history, open('history', 'wb'))

到此这篇关于Python实现历史记录功能的文章就介绍到这了!


Tags in this post...

Python 相关文章推荐
python基础教程之popen函数操作其它程序的输入和输出示例
Feb 10 Python
python为tornado添加recaptcha验证码功能
Feb 26 Python
Python实现在线程里运行scrapy的方法
Apr 07 Python
Python下的subprocess模块的入门指引
Apr 16 Python
python获取一组数据里最大值max函数用法实例
May 26 Python
详解Python数据可视化编程 - 词云生成并保存(jieba+WordCloud)
Mar 26 Python
python pyinstaller 加载ui路径方法
Jun 10 Python
jenkins配置python脚本定时任务过程图解
Oct 29 Python
tensorflow的ckpt及pb模型持久化方式及转化详解
Feb 12 Python
python生成并处理uuid的实现方式
Mar 03 Python
python的reverse函数翻转结果为None的问题
May 11 Python
浅谈Python 命令行参数argparse写入图片路径操作
Jul 12 Python
python解析json数据
Apr 29 #Python
python的html标准库
Apr 29 #Python
python和C/C++混合编程之使用ctypes调用 C/C++的dll
Apr 29 #Python
python数据处理之Pandas类型转换
Python实现将多张图片合成MP4视频并加入背景音乐
Python FuzzyWuzzy实现模糊匹配
Apr 28 #Python
PYTHON基于Pyecharts绘制常见的直角坐标系图表
You might like
php操作excel文件 基于phpexcel
2010/07/02 PHP
基于php导出到Excel或CSV的详解(附utf8、gbk 编码转换)
2013/06/25 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
PHP开发的微信现金红包功能示例
2017/06/29 PHP
PHP5.5基于mysqli连接MySQL数据库和读取数据操作实例详解
2019/02/16 PHP
使用Rancher在K8S上部署高性能PHP应用程序的教程
2020/07/10 PHP
Javascript YUI 读码日记之 YAHOO.util.Dom - Part.3
2008/03/22 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
Script标签与访问HTML页面详解
2014/01/10 Javascript
Javascript 多物体运动的实现
2014/12/24 Javascript
JavaScript入门系列之知识点总结
2016/03/24 Javascript
Bootstrap学习笔记之js组件(4)
2016/06/12 Javascript
Vue.js动态组件解析
2016/09/09 Javascript
js for循环倒序输出数组元素的实例
2017/03/01 Javascript
C#微信小程序服务端获取用户解密信息实例代码
2017/03/10 Javascript
ionic实现下拉刷新载入数据功能
2017/05/11 Javascript
vue 封装自定义组件之tabal列表编辑单元格组件实例代码
2017/09/07 Javascript
nodejs之koa2请求示例(GET,POST)
2018/08/07 NodeJs
在Express中提供静态文件的实现方法
2019/10/17 Javascript
jQuery实现的图片点击放大缩小功能案例
2020/01/02 jQuery
Angular 多模块项目构建过程
2020/02/13 Javascript
深入了解Vue3模板编译原理
2020/11/19 Vue.js
[02:35]DOTA2超级联赛专访XB 难忘一年九冠称王
2013/06/20 DOTA
Python sqlite3事务处理方法实例分析
2017/06/19 Python
CentOS 7下安装Python3.6 及遇到的问题小结
2018/11/08 Python
Python设计模式之迭代器模式原理与用法实例分析
2019/01/10 Python
Python日志处理模块logging用法解析
2020/05/19 Python
Orvis官网:自1856年以来,优质服装、飞钓装备等
2018/12/17 全球购物
建筑专业毕业生推荐信
2013/11/21 职场文书
新闻编辑自荐书范文
2014/02/12 职场文书
环保倡议书400字
2014/05/15 职场文书
单位一把手群众路线四风问题整改措施
2014/09/25 职场文书
2014年实习生工作总结
2014/11/27 职场文书
顶岗实习计划书
2015/01/16 职场文书
简短清晨问候语
2015/11/10 职场文书
浅谈Golang 切片(slice)扩容机制的原理
2021/06/09 Golang