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的ORM框架SQLObject入门实例
Apr 28 Python
分享15个最受欢迎的Python开源框架
Jul 13 Python
为python设置socket代理的方法
Jan 14 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
Dec 22 Python
Django中ORM外键和表的关系详解
May 20 Python
关于不懂Chromedriver如何配置环境变量问题解决方法
Jun 12 Python
Python编程学习之如何判断3个数的大小
Aug 07 Python
Django使用list对单个或者多个字段求values值实例
Mar 31 Python
jupyter notebook中新建cell的方法与快捷键操作
Apr 22 Python
Python 利用argparse模块实现脚本命令行参数解析
Dec 28 Python
python元组拆包实现方法
Feb 28 Python
Python中tqdm的使用和例子
Sep 23 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
fetchAll()与mysql_fetch_array()的区别详解
2013/06/05 PHP
解析mysql left( right ) join使用on与where筛选的差异
2013/06/18 PHP
php代码书写习惯优化小结
2013/06/20 PHP
浅谈PHP中关于foreach使用引用变量的坑
2016/11/14 PHP
PHP/HTML混写的四种方式总结
2017/02/27 PHP
Ubuntu 16.04下安装PHP 7过程详解
2017/03/28 PHP
PHP-FPM 设置多pool及配置文件重写操作示例
2019/10/02 PHP
Extjs中的GridPanel隐藏列会显示在menuDisabled中解决方法
2013/01/27 Javascript
Jquery实现侧边栏跟随滚动条固定(兼容IE6)
2014/04/02 Javascript
javascript闭包传参和事件的循环绑定示例探讨
2014/04/17 Javascript
node.js中的socket.io入门实例
2014/04/26 Javascript
去除字符串左右两边的空格(实现代码)
2016/05/12 Javascript
原生JS实现-星级评分系统的简单实例
2016/08/21 Javascript
js输入框使用正则表达式校验输入内容的实例
2017/02/12 Javascript
jquery.picsign图片标注组件实例详解
2018/02/02 jQuery
vue-cli常用设置总结
2018/02/24 Javascript
vue使用原生js实现滚动页面跟踪导航高亮的示例代码
2018/10/25 Javascript
在JavaScript中实现链式调用的实现
2019/12/24 Javascript
JS实现轮播图效果
2020/01/11 Javascript
NodeJS多种创建WebSocket监听的方式(三种)
2020/06/04 NodeJs
[01:04:06]DOTA2上海特级锦标赛A组资格赛#2 Secret VS EHOME第一局
2016/02/26 DOTA
python实现的登陆Discuz!论坛通用代码分享
2014/07/11 Python
对Python3中的input函数详解
2018/04/22 Python
解决python3 HTMLTestRunner测试报告中文乱码的问题
2018/12/17 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
利用python、tensorflow、opencv、pyqt5实现人脸实时签到系统
2019/09/25 Python
Python 模拟动态产生字母验证码图片功能
2019/12/24 Python
关于pytorch处理类别不平衡的问题
2019/12/31 Python
估算杭州有多少软件工程师
2015/08/11 面试题
七年级政治教学反思
2014/02/03 职场文书
购房协议书
2014/04/11 职场文书
生产助理岗位职责
2014/06/18 职场文书
2015年教师见习期工作总结
2015/05/20 职场文书
2016年会领导致辞稿
2015/07/29 职场文书
煤矿安全生产管理协议书
2016/03/22 职场文书
Nginx设置日志打印post请求参数的方法
2021/03/31 Servers