2013-03-01 10 views
7

入力した変数が定義済みの変数と一致するかどうかを確認する基本メニューを作成しようとしています。変数が定義されている場合は、定義された変数のデータを取得します。ユーザー入力から入力された変数の値を取得する方法は?

例。

Item1 = "bill" 
Item2 = "cows" 
item3 = "abcdef" 
Choose_Item = input("Select your item: ") 
  • は私が等しくなければならないItem1
  • Choose_Itemに入力し"bill"
+2

あなたは何を試しましたか?これは質問よりもコードリクエストに似ているようです。 – Hubro

+0

'' Choose_Item = globals()[input( "あなたのアイテムを選んでください:])]' ' – eyquem

答えて

18

これは何を探しているように思える:最高ではないでしょう

Choose_Item = eval(input("Select your item: ")) 

このしかし、タイプミスや悪意のあるユーザーが簡単にタラをクラッシュさせる可能性があるためあなたのシステムに過負荷をかける、あるいは好きなような厄介なことをしないでください。この具体的なケースでは、より良いアプローチがあります。

items = {'item1': 'bill', 'item2': 'cows', 'item3': 'abcdef'} 
choice = input("Select your item: ") 
if choice in items: 
    the_choice = items[choice] 
else: 
    print("Uh oh, I don't know about that item") 
+0

Bahあなたは文字通り同じアドバイスでパンチに私を打つことができます。 +1速いタイアー;) –

+1

私はちょうどあなたの答えに同様のコメントを入力していたので、あなたは少なくともそのレースに勝った。 :) – Dougal

4

これについては2通りの方法があります。悪い方法:

print eval(Choose_Item) 

良い方法はあなたが名前のユーザーが作成するものである変数を選択したい場合はlocals()[Choose_Item]を使用する必要があります辞書

items = {'1':'bill','2':'cows'} 
Choose_Item = input("Select your Item: ") 
try: 
    print(items[Choose_Item]) 
except KeyError: 
    print ('Item %s not found' % Choose_Item) 
+3

FWIW:質問はpython-3とタグ付けされているので、printステートメントに括弧を入れたいと思っています。文字列を作成して何もしないで、例外の場合に何かを印刷したいと思うかもしれません。 :) – Dougal

+0

しかし、ランダムな文字列良いプログラミングエチケットですか?あなたがこの答えにふさわしいもう一つの理由 –

4

を使用することです。

items = { 
    'Item1': 'bill', 
    'Item2': 'cows', 
    'Item3': 'abcdef', 
} 

...そしてあなたが望む値はitems[Choose_Item]次のとおりです。これを行うには

より多くの従来の方法は、しかし、辞書を使用することです。

+0

+1 - 地元のアプローチは、悪意のあるユーザーが少なくともコードを評価することができないという点で、evalより優れています。 :)もちろん、辞書のアプローチが望ましいです。 – Dougal

関連する問題