2016-04-09 2 views
-5

Почему я все время получаю эту ошибку? Я предполагаю, что raw_input() считывается как input(), и он не может видеть, что пользователь вводит строку. Я не знаю, как я могу изменить это, чтобы он мог работать. И нет, вопрос: «Python 2.7, вводящий пользователя и управляющий как строка без кавычек», не отвечает на мой вопрос.превращение строки в переменную (неправильный тип операнда для унарного +: 'str')

options = ["An animal", "A food", "A fruit", "A number", "A superhero name", "A country", "A dessert", "A year"] 
#"options" become variables 
for i in options: 
    if i[0:3] == "An ": 
     exec("%s = %s" % (i[3::], raw_input("Enter " + i + " "))) 
    else: 
     exec("%s = %s" % (i[2::], raw_input("Enter " + i + " "))) 

Я продолжаю ПОЛУЧАТЬ эту ошибку:

NameError: name 'input' is not defined 
+1

Вероятно, это указывает на эту часть: ' raw_input ("Enter", + i + "") '. Вы видите, что в этом плохого? –

+0

@Penguin: сначала присвойте 'raw_input (" Enter ", + i +" ")' переменной, а затем поместите переменную где 'raw_input' теперь. Итак: 'a = raw_input (" Enter ", + i +" ")', а затем 'exec ("% s =% s "% (i [3 ::], a)'. –

+1

Я вижу, что это второй вопрос об этом коде, который вы задали через час, и оба относятся к тем, которые уже были затронуты на этом сайте. Пожалуйста, уделите еще немного времени, чтобы исследовать ваши вопросы, прежде чем спрашивать здесь. Попробуйте переименовать имя исключения с помощью «site: stackoverflow». com ", чтобы увидеть другие ответы SO. – skrrgwasme

ответ

2

Вы не предоставили достаточно информации, но мои психические силы говорят мне, что, когда вы были подсказаны с «Enter животное», вы набрали input.

Попробуйте мысленно пройти через то, что делает ваш код, особенно, когда вы получаете:

exec("%s = %s" % (i[3::], raw_input("Enter " + i + " "))) 

Таким образом, для первой итерации цикла, это становится:

exec("%s = %s" % ("animal", "input")) 

Тогда, когда происходит замещение:

exec("animal = input") 

Это эквивалентно набору текста:

animal = input 

непосредственно в интерпретаторе Python. input не определен, так что вы получите:

NameError: name 'input' is not defined 

вероятно Вы имели в виду, чтобы окружить правую цитатами, чтобы рассматривать его как строку при выполнении:

exec("%s = '%s'" % ("animal", "input")) # Note that this is unsafe. See the note below. 

Все, что было сказано, Я чувствую себя обязанным сказать, что этот код невероятно хрупкий. Когда цикл повторяется до «Название супергероя», он также будет прерываться, потому что superhero name не является допустимым идентификатором. Вместо этого вы, вероятно, должны разделить строку на пробелы и, возможно, взять второе слово или просто заменить все пробелы, например, подчеркиваниями. Кроме того, вам необходимо будет дезинформировать пользовательский ввод, чтобы пользователь не мог сбежать, предоставив котировки на входе. (Или даже лучше было бы избежать использования exec с пользовательским вводом целиком. Вам действительно нужны имена переменных? Почему бы просто не использовать словарь Python для сопоставления строк с подсказкой со строками ввода?)

Смежные вопросы