2015-11-08 3 views
2

Итак, у меня есть этот материал нижеPython: переменная не определена?

def userinput(): 
    adjective1 = input("Adjective: ") 
    noun1 = input("Noun: ") 
    noun2 = input("Noun: ") 

def story(): 
    print("A vacation is when you take a trip to some " + adjective1 + " place.") 
    print("Usually you go to some place that is near " + noun1 + " or up on " + noun2 + ".") 

тогда, когда я запускаю функции и обеспечивают ввод, он возвращается с

File "/Users/apple/Dropbox/MadLibs 6.py", line 52, in story 
print("A vacation is when you take a trip to some " + adjective1 + " place with your "+ adjective2 + " family.") 
NameError: name 'adjective1' is not defined 

Что значит этим, и как я могу это исправить ?

+1

вам нужно установить две переменные как глобальные. –

ответ

0

Эти переменные являются локальными для функции. Этот ответ дает хорошее резюме обзора в Python - Short Description of the Scoping Rules?.

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

8

все о объеме, вы не можете Acces переменной в другой области видимости функции Попробуйте это:

def userinput(): 
    adjective1 = input("Adjective: ") 
    noun1 = input("Noun: ") 
    noun2 = input("Noun: ") 
    return adjective1, noun1, noun2 

def story(): 
    adjective1, noun1, noun2 = userinput() 
    print("A vacation is when you take a trip to some " + adjective1 + " place.") 
    print("Usually you go to some place that is near " + noun1 + " or up on " + noun2 + ".") 

Позвонив UserInput на второй функции и получать возвращающий информацию Вы можете получить доступ к нему. Обратите внимание, что функции appjective1, noun1 и noun2 формируются локально в этой функции, поэтому они отличаются от переменных userinput, хотя они называются одинаково.

0

Попробуйте это:

def userinput(): 
    global adjective1 
    adjective1 = input("Adjective: ") 
    global noun1 
    noun1 = input("Noun: ") 
    global noun2 
    noun2 = input("Noun: ") 

def story(): 
    print("A vacation is when you take a trip to some " + adjective1 + " place.") 
    print("Usually you go to some place that is near " + noun1 + " or up on " + noun2 + ".") 
+0

Его возможность, но обучение этому человеку, который не знает, как справиться с областью, не очень хорошая практика :) – Netwave

+0

@ DanielSanchez Я нахожу это практичным и необходимым при создании игр, например. –

+0

Я работал над несколькими заголовками, и я думаю, что объявление глобальной переменной внутри функции не является хорошей практикой. Сделайте их глобальными, выкинув их снаружи (и объявив глобальным, если вы это потребуете). Это просто мое мнение, ваш код - еще один рабочий вариант :) – Netwave

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