Списки имен с использованием пользовательского ввода - PullRequest
0 голосов
/ 25 мая 2011

Я хотел бы позволить пользователю определить имя списка, который будет использоваться в коде, поэтому я использую функцию ввода. Я хочу, чтобы ответ пользователя на функцию ввода стал именем списка. Я попробовал следующее:

a = input("What would you like the name of the list to be? ")
a = []

Однако этот список назывался списком «a», а не какой-либо строкой, которую пользователь ответил на функцию ввода. Как я могу позволить пользователю назвать список? Есть ли в любом случае, чтобы сделать это?

Ответы [ 2 ]

6 голосов
/ 25 мая 2011

Правильный способ выполнить то, что вы хотите здесь, это dict списков:

>>> lists = {}
>>> lists['homework'] = [40, 60, 70]
>>> lists['tests'] = [35, 99, 20]
>>> lists
{'tests': [35, 99, 20], 'homework': [40, 60, 70]}
>>> 

Когда вы можете запросить ввод, функция input (raw_input в Python 2.x) возвращает строку, которую вы можете сделать ключом словаря.

0 голосов
/ 25 мая 2011

Прямой ответ на ваш вопрос заключается в том, что вы можете использовать vars() для доступа к вашей переменной области действия:

list_name = input("What would you like the name of the list to be?")
vars()[list_name] = []

Тогда, если вы введете «foo» в командной строке, у вас будет переменная с именем foo.


Косвенный ответ заключается в том, что, как сказали вам несколько других пользователей, вы не хотите, чтобы пользователь выбирал имена переменных, вы хотите использовать словарь списков, чтобы у вас были все списки, которые пользователи создали вместе в одном месте.

Программа, в которой имена переменных выбираются во время выполнения, - это программа, которая никогда не будет без ошибок. Например, если пользователь вводит «input» в ваше приглашение, вы переопределяете свою функцию ввода, так что, когда тот или иной пользователь пытается создать другой список, вместо этого вы получите ошибку:

>>> list_name = input("What would you like the name of the list to be?")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'list' object is not callable
...