2013-03-01 53 views
7

我想创建一个基本菜单,检查输入的变量是否与定义的变量匹配。如果变量已定义,则获取已定义变量的数据。如何获取用户输入的变量值?

例子。

Item1 = "bill" 
Item2 = "cows" 
item3 = "abcdef" 
Choose_Item = input("Select your item: ") 
  • Item1
  • Choose_Item类型应该等于"bill"
+2

你试过了什么?这似乎更像是一个代码请求,而不是一个问题。 – Hubro 2013-03-01 23:47:10

+0

''Choose_Item = globals()[input(“Select your item:”)]'' – eyquem 2013-03-01 23:48:48

回答

18

这似乎是你要找的东西:

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

这可能不是最好的策略,但是,因为错字或恶意用户很容易崩溃你的鳕鱼e,超载你的系统,或者做其他任何他们喜欢的讨厌的东西。对于这种特殊情况,更好的方法可能是

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为更快的typer;) – 2013-03-01 23:48:00

+1

我只是在你的答案上输入类似的评论,所以你至少赢得了这场比赛。 :) – Dougal 2013-03-01 23:48:51

4

有两种方法可以解决这个问题。糟糕的方法:

print eval(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,因此您希望在该打印语句中使用parens,并且您可能还希望在异常情况下打印某些内容,而不是仅创建一个字符串而不对其执行任何操作。 :) – Dougal 2013-03-01 23:50:47

+0

但是不是随机字符串很好的编程礼仪?良好的抓住先生,你值得这个答案的另一个原因 – 2013-03-01 23:52:51

4

你需要使用locals()[Choose_Item],如果你想选择一个变量,其名称是用户产生的内容。

一种更传统的方式来做到这一点,虽然是使用字典:

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

...然后你想要的值是items[Choose_Item]

+0

+1 - 当地人的方法比eval更好,因为它至少不会让恶意用户去评估代码。 :)当然,字典的方法是可取的。 – Dougal 2013-03-01 23:55:06