2015-11-08 83 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

它的所有範圍,你不能在另一個函數範圍內的存取權限變量 試試這個:

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第二函數獲得其返回的信息,你可以訪問它。請注意,形容詞1,名詞1和名詞2形式的故事函數在該函數中是局部範圍的,所以它們與用戶輸入變量不同,儘管它們命名相同。

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