2015-05-17 2 views
0

Я пытаюсь создать цикл for, который запрашивает пользователя для хобби 3 раза, а затем добавляет каждого в хобби.NameError возвращен с помощью Python raw_input prompt

Вот что я придумал до сих пор:

hobbies = [] 

for tries in range(3): 
    hobby = raw_input(input("what's your favorite hobby?: ")) 
    hobbies.append(hobby) 

После я вхожу в ответ на входной строке пользователя, скажем, например, мой ответ «конкурентная еда», я получаю следующее сообщение об ошибке в терминале:

Traceback (most recent call last): 
    File "hobbyprompt.py", line 12, in <module> 
    hobby = raw_input(input("what's your favorite hobby?: ")) 
    File "<string>", line 1, in <module> 
NameError: name 'competitive eating' is not defined 

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

+0

Почему вы используете вход внутри raw_input в любом случае? –

ответ

3

input равнозначно eval(raw_input). Это полностью избыточно в вашем примере. Просто поместите его и держать raw_input только:

hobby = raw_input("what's your favorite hobby?: ") 

EDIT:
Чтобы ответить на вопрос в комментариях, input принимает строку и пытается оценить его как выражение питона (см eval's documentation для подробностей). Поскольку «конкурентная еда» не является переменной, которую вы уже определили, ее нельзя оценить, и, следовательно, NameError.

+0

спасибо за объяснение, я знаю, что это ошибка с моей стороны, но можете ли вы объяснить, почему, если у вас есть raw_input (вход («какое ваше любимое хобби?»)), Он дает NameError? Какая ошибочная логика я создал там? – AdjunctProfessorFalcon

+0

@ChrisPurrone см. Мой отредактированный ответ с подробностями. – Mureinik

+0

Хорошо, спасибо за отредактированное объяснение! Итак, в основном, вставив «ввод» в оператор, он проверяет, соответствует ли пользовательский ввод заданной строке? – AdjunctProfessorFalcon

1

Вам нужен только raw_input, а не input, а затем raw_input. Используйте

hobby = raw_input("what's your favorite hobby?: ") 

В Python 3.x, input делает то, что raw_input делали в предыдущих версиях. Но до Python 3, input, помимо чтения строки из stdin, оценил эту строку так, как если бы она была действительным выражением Python. raw_input является альтернативой, поэтому вы должны использовать тот или иной - не оба. Здесь подходит raw_input.