鱼C论坛

 找回密码
 立即注册
查看: 1514|回复: 0

[技术交流] 【008】Python实现历史记录的存取(猜数字游戏)

[复制链接]
发表于 2019-6-12 22:11:09 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
'''
目的:以猜数字游戏为例,在磁盘中永久记录下最近5次的输入,并随时读取
'''
from random import randint
from collections import deque
import pickle
#打开'history.txt'文件,如果不存在则创建
open('history.txt','a')
#判断'history.tet'是否为空
isempty = bool(open('history.txt','rb').read())

#如果'history.tet'不为空则将文件中的内容读取并反序列化成对象,否则创建一个长度为5的空双向队列q
q = (pickle.load(open('history.txt','rb')) if isempty else (deque([],5)))

#产生一个随机0到50的答案
N = randint(0,50)
def guess(k):
    if k == N:
        print('You guessed it')
        return True
    if k > N:
        print('%s is greater than N' % k)
    else:
        print('%s is less than N' % k)
    return False
while True:
    ans = input('Please submit your answer:')
    if ans.isdigit():
        k = int(ans)
        q.append(k)
        if guess(k):
            break
    
    #输入'hy'查看最近5次的历史回答
    elif ans == 'hy':
        print(list(q))

    #输入'exit'退出答题
    elif ans == 'exit':
        break

#将p对象序列化写入'history.txt'文件中
pickle.dump(q,open('history.txt','wb'))
'''
提问与思考:
1、pickle模块可以序列化对象并保存到磁盘中,并在需要的时候读取出来,任何对象都可以执行序列化操作
2、pickle关于参数file,必须是以二进制的形式进行操作(存取)
3、deque用于创建一个有限大小的双向列表(先进先出)
4、isdigit() 方法检测字符串是否只由数字组成
5、一开始打开文件如果是'w'形式会从头开始编辑,即原有内容会被删除;以'r'形式打开不存在不会自动创建
'''

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-15 21:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表