2012-05-04 63 views
2

正如前面(但不同)的問題所述,我試圖找出一個Python的「簡單」字典/數據庫,它將從十個列表中檢索一個名稱,要求的信息。即輸入可以是'約翰電話',其中輸出是'約翰的電話號碼是0401'(我已拍下);但我也可以輸入'約翰生日'或'約翰愛好',並且輸出將會相應。字典/數據庫鍵值檢索

由於我是一個完整的noob,我甚至不知道從哪裏開始。幾個小時的谷歌搜索和閱讀講義筆記到目前爲止沒有產生任何效果。 我覺得這與多重參數%函數有關,但我們的講師確實不清楚如何進一步研究。 到目前爲止,我所擁有的是:

#!/usr/bin/python 

friends = {'John': {'phone' : '0401', 
        'birthday' : '31 July', 
        'address' : 'UK', 
        'interests' : ['a', 'b', 'c']}, 
      'Harry': {'phone' : '0402', 
        'birthday' : '2 August', 
        'address' : 'Hungary', 
        'interests' : ['d', 'e', 'f']}} 
name = raw_input ('Please enter search criteria: ') 
if name in friends: 
    print "%s's phone number is: %s" % (name, friends[name]['phone']) 
else: 
    print 'no data' 

我也想用「而」功能,所以PROG不盡快關閉作爲信息給出,但不知道這是否會是適當。 任何指針都會很棒,即使它是「嘗試這種」提示或指向相關網站的鏈接。

回答

5

由於這是功課,我會限制我的回答一些提示:

  1. tok = name.split()會分裂成name單詞的列表,所以'John address'將成爲['John', 'address']
  2. 您可以訪問單個單詞tok[0]tok[1],並使用它們索引friends以獲取相關人員以及相關字段。
  3. 我看到將輸入/搜索邏輯封裝到while循環中沒有問題,以便用戶可以執行多個查詢。唯一要弄清楚的是你將如何退出該循環。
+0

給匿名downvoter:照顧提供理由? – NPE

+0

分割一個''''通常是一個壞主意,只需使用'.split()';那麼如果用戶鍵入'John地址'(兩個空格,加上一個尾部空格),結果仍然是'['John','address']' –

+0

@EthanFurman:公平點,固定。 – NPE

0

聽你的問題的第一部分的aix。對於第二部分,我建議提出一個退出值(可能是'退出'),用戶可以鍵入退出程序,然後讓while循環繼續進行,而輸入不是該值。

2

根據您的示例代碼,'John phone'將不起作用,因爲它實際上會查找'John phone',因爲名稱(和'phone'是硬編碼的)。爲了說明,嘗試這樣的代碼:

response = raw_input('Please enter search criteria: ').split() 

try: 
    print "%s's %s is %s" % (response[0], response[1], friends[response[0]][response[1]]) 
except KeyError: 
    print 'no data' 

分割()接受單獨的每個參數,其隨後可以與參考[0]和[1](等等)。你已經在%替換的正確軌道上,但是這種方法會給它更多的可用性和可讀性。

關鍵是您不需要檢查名稱是否匹配(或匹配條件)。假設它會在那裏 - 並且在發生特殊情況(未找到匹配)的情況下,它可以按預期返回「無數據」。

Please enter search criteria: John phone 
John's phone is 0401 

Please enter search criteria: Harry birthday 
Harry's birthday is 2 August