2

コード内のリストを参照するためのユーザー入力を取得したいと考えています。私はそれが名前空間と呼ばれると思いますか?では、ユーザーが「list1」または「list2」を入力すると仮定して、ユーザーが入力したものを印刷するには、このコードに何をしなければなりませんか?

list1 = ['cat', 'dog', 'juice']
list2 = ['skunk', 'bats', 'pogo stick']

x = raw_input('which list would you like me to print?')

私はそのようなリストをたくさん作る予定なので、一連の if...then ステートメントは手に負えないように思えます。

4

2 に答える 2

4

私が今考えることができるケースでは、ユーザーが参照できるようにしたいものを含む辞書を用意したほうがよいでしょう。たとえば、次のようになります。

my_dict = {
    'list1': ['cat', 'dog', 'juice']
    'list2': ['skunk', 'bats', 'pogo stick']
}

key = raw_input('which list would you like me to print?')

print my_dict[key]

実際、組み込みのglobals()を次のように利用できます。

list1 = ['cat', 'dog', 'juice']
list2 = ['skunk', 'bats', 'pogo stick']
x = raw_input()

print globals()[x]
于 2010-06-17T02:07:32.747 に答える
2

dict を使用するという一般的な考え方は良いですが、最適な具体的な実装はおそらく次のようなものです。

def pick_one(prompt, **kwds):
  while True:
    x = raw_input(prompt)
    if x in kwds:
      return kwds[x]
    else:
      print 'Please choose one of: ',
      for k in sorted(kwds): print k,
      print

たとえば、次のように使用します。

print pick_one('which list would you like me to print?',
    list1 = ['cat', 'dog', 'juice']
    list2 = ['skunk', 'bats', 'pogo stick'])

ポイントは、限られた数の可能性の中から 1 つを選択するようにユーザーに求めている場合、その選択それらの 1 つであることを常に確認する必要があるということです (結局、スペルミスなどは簡単です)。そうでない場合は、正確にプロンプ​​トを出して (利用可能な選択肢のリストを表示)、ユーザーにもう一度チャンスを与えます。

あらゆる種類の改良 (たとえば、試行回数の上限があり、その後、ユーザーが入力してランダムに選択することはできないと判断した場合;-) は、(難しすぎず、面白くもありません;-) 演習として残されます。読者のために。

于 2010-06-17T02:22:57.760 に答える