2012-05-04 18 views
2

前回の(しかし異なる)質問で述べたように、私は10のリストから名前を取得するPythonの「単純な」辞書/データベースを見つけようとしています。要求された情報。すなわち、入力は 'John phone'とすることができ、出力は 'John's phone number is 0401'(これは私が落ち着いている)である。 「John Birthday」や「John hobbies」と入力しても出力が一致します。辞書/データベースのキー値検索

私は完全なノブであるため、どこから始めるべきかはわかりません。数時間のグーグルと講義ノートのポーリングはこれまで何ももたらさなかった。 私はそれが複数の引数%関数と関係があると感じていますが、私たちの講師は本当にそれをどのように利用するのか明確ではありませんでした。 はこれまでのところ、私が持っているものは次のとおりです。

#!/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は、すぐに閉じないように、使用したいが、これが可能かどうかわからないと思います適切な。 「この種のヒントを試しても」、または関連するWebサイトへのリンクであっても、すべてのポインタは素晴らしいでしょう。

答えて

5

これは宿題ですので、私はいくつかのヒントに私の答えを制限します:

  1. tok = name.split()は、単語のリストにnameを分割するだろう、そう'John address'['John', 'address']なります。
  2. 個々の単語にはtok[0]tok[1]としてアクセスし、それらを使用してfriendsにインデックスを作成し、関連する人物と関連するフィールドを取得することができます。
  3. 入力/検索ロジックをループwhileにラップして、ユーザーが複数のクエリを実行できるようにしても問題はありません。把握する唯一のことは、ループを終了する方法です。
+0

:正当な理由を提供するための注意? – NPE

+0

''''で分割することは一般的には悪い考えです。単に '.split()'を使用してください。 'John '、' address ']' –

+0

@EthanFurman:固定小数点、固定されています。 – NPE

0

質問の最初の部分については、aixを聞きます。 2番目の部分については、ユーザーがプログラムを終了するために入力できる終了値(おそらく 'exit')を提示し、入力がその値ではない間whileループを続けることをお勧めします。

2

サンプルコードに基づいて、「John phone」は名前として「John 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