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'])

关键是,当您要求用户从有限数量的可能性中选择一个时,您总是想检查选择是否是其中之一(毕竟很容易拼写错误等),如果没有,请准确提示(给出可用选择的列表)并给用户另一个机会。

各种改进(例如,有最大尝试次数,之后您决定用户不能输入并随机选择一个;-)留作(不太难但也不太有趣;-)练习为读者。

于 2010-06-17T02:22:57.760 回答