2

前の (ただし別の) 質問で述べたように、Python を使用して「単純な」辞書/データベースを見つけようとしています。これは、要求された情報を使用して、10 個のリストから名前を取得します。つまり、入力は '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'

また、「while」関数を使用して、その情報が提供されるとすぐにプログラムが閉じないようにしたいのですが、これが適切かどうかはわかりません。「これを試してみてください」という種類のヒントや、関連する Web サイトへのリンクであっても、どのような指針でも構いません。

4

3 に答える 3

5

これは宿題なので、答えをいくつかのヒントに限定します。

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

サンプルコードに基づいて、「ジョンの電話」は実際には名前として「ジョンの電話」を検索するため、機能しません(「電話」はハードコードされています)。例として、次のようなコードを試してください。

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'

split() は各引数を個別に取り、[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
于 2012-05-04T16:15:18.930 に答える
0

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

于 2012-05-04T16:12:38.260 に答える