輸入上下文,留下空行
def __init__(自身,數據文件,默認值=無):
self.datafile = datafile
self.default =默認
self.data = shelve。BsdDbShelf(bsddb . open(self . datafile,' c '))
def __del__(self):
self.data.sync()
self.data.close()
def __getitem__(self,k):
返回self.data.get(k,self.default)
def __setitem__(self,k,v):
self.data[k] = v
輸入和/或關鍵字進行查詢
和默認數據
[9]
或者得到k v
[8, 9, 10, 11]
$?
#?編碼:?utf-8
進口?關於
派特?=?重新編譯(" \w+")
def?makeIndex():
指數,?lineno?=?{},?0
什麽時候?真實:
在哪裏?=?原始輸入()
如果?ln:
lineno?+=?1
為了什麽?詞?在?patt.findall(ln):
index.setdefault(word,?[]).追加(行號)
否則:
破裂
回歸?指數
def?indexAndQuery(index,*參數):
找到了?=?沒有人
為了什麽?詞?在?參數:
明白了嗎?=?index.get(word,?[])
如果?不是嗎?獲得:
回歸?沒有人
如果?不是嗎?找到:
找到了?=?設置(獲得)
否則:
找到了?& amp=?設置(獲得)
如果?不是嗎?找到:
回歸?沒有人
回歸?列表(找到)
def?indexOrQuery(index,*參數):
找到了?=?集合()
為了什麽?詞?在?參數:
找到了?|=?set(index.get(word,?[]))
回歸?列表(找到)
def?lnparser(ln):
文字?=?patt.findall(ln.lower())
如果?len(words)& lt;2?還是?單詞[0]?不是嗎?在?('和','或'):
#?輸入的行不是以和,?還是開始?或者沒有給出要搜索的單詞。
回歸?沒有人
否則:
回歸?單詞[0],?單詞[1:]
cmdswitch?=?{
和':indexAndQuery,
還是':indexOrQuery,
}
打印?“進入?語境,?離開?被誰?空的?線”
指數?=?makeIndex()
打印?“進入?和/或?關鍵詞?去哪?查詢"
什麽時候?真實:
明白了嗎?=?lnparser(raw_input())
如果?不是嗎?獲得:
破裂
打印?cmd switch[get[0]](index,*得到了[1])