py程式設計技巧-1.7-如何實現使用者歷史記錄儲存(最多n條)

weixin_33806914發表於2017-03-24

實際案例:

很多應用程式都自帶一個瀏覽使用者的歷史記錄的功能
例如:

  • 瀏覽器歷史記錄
  • 視訊播放歷史記錄
  • shell檢視使用者輸入過的命令

現在我們製作了一個簡單的猜數字大小的小遊戲
新增歷史記錄功能,顯示使用者最近猜過的數字如何實現?

解決方案:

使用容量為n的佇列來儲存歷史記錄

  • 使用標準庫collections中的deque,他是一個雙端迴圈佇列
  • 程式退出前,可以使用pickie將佇列物件存入檔案,再次執行時程式將其匯入

猜數小遊戲:

from random import randint

Num = randint(0,100)

def guess(k):
    if k == Num:
        print "success"
        return True
    elif k > Num:
        print "the number is bigger"
    else:
        print "the number is smaller"
    return False

while True:
    line = raw_input("please input a number(1~100)")
    # line是一個字串,通過isdigit()方法來看這個字串是不是一個數字
    if line.isdigit():
        k = int(line)
        if guess(k):
            break

佇列小例子:

# 使用佇列

from collections import deque

# deque傳入兩個引數:1.初始值;2.佇列長度
q = deque([],5)

# append方法從右部新增
q.append(1)
q.append(2)
q.append(3)
q.append(4)
q.append(5)
q.append(6)

print q

加上了歷史記錄的猜數字小遊戲:

from collections import deque
from random import randint

Num = randint(0,100)
history = deque([], 5)

def guess(k):
    if k == Num:
        print "success"
        return True
    elif k > Num:
        print "the number is bigger"
    else:
        print "the number is smaller"
    return False

while True:
    line = raw_input("please input a number(1~100):")
    if line.isdigit():
        k = int(line)
        history.append(k)
        if guess(k):
            break
    elif line == 'history' or line == 'h?':
        print list(history)
    else:
        print 'input error'

將物件儲存進檔案進行持久化

import pickle
from collections import deque
q = deque([3,4,5,6,7])
# dump()方法傳入兩個引數: 1.一個是要儲存的物件;2.一個可寫的檔案物件
pickle.dump(q,open('history','w'))
q2 = pickle.load(open('history'))
print q2

cmd亂碼修改

chcp 936 #utf-8輸出

相關文章