Как получить пользовательский ввод для ссылки на переменную в Python? - PullRequest
2 голосов
/ 17 июня 2010

Я хотел бы, чтобы пользовательский ввод ссылался на некоторый список в моем коде. Я думаю, что это называется пространством имен? Итак, что я должен был бы сделать с этим кодом, чтобы распечатать все введенные пользователем данные, предположив, что они вводят list1 или list2?

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

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

Я планирую иметь много таких списков, поэтому ряд утверждений if ... then кажется неуправляемым.

Ответы [ 2 ]

4 голосов
/ 17 июня 2010

В тех случаях, о которых я могу подумать сейчас, вероятно, было бы лучше иметь словарь, содержащий то, что вы хотите, чтобы пользователь мог ссылаться, например:

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]
2 голосов
/ 17 июня 2010

Общая идея использования 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'])

Дело в том, что, когда вы просите пользователя выбрать одну из ограниченного числа возможностей, вы всегда хотите проверить, чтобы выбор был одной из них (это в конце концов легко ошибиться и т. д.) и, если нет, точно подсказать (предоставив список доступных вариантов) и дать пользователю еще один шанс.

Все виды уточнений (например, с максимальным количеством попыток, после которых вы решаете, что пользователь просто не может набрать и выбрать один случайным образом ;-), оставляются как (не слишком сложно, но и не слишком интересно; -) упражнения для читателя.

...