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