Python:未定义变量?

Python:未定义变量?,python,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

我在下面有这些东西

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

这是什么意思?我如何修复它?

这些变量是函数的局部变量。这个答案很好地总结了Python中的作用域


您通常希望在实际情况下尽可能地限制变量的可用范围,在这种情况下可能使用函数参数

这都是关于作用域的,您不能在另一个函数作用域中访问变量 试试这个:

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形式的故事函数在该函数中是局部作用域,因此它们与userinput变量不同,尽管它们的名称相同。

尝试以下方法:

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 + ".")
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 + ".")

您需要将这两个变量设置为全局变量。这是一个可能性,但是,将这一点教给不知道如何处理作用域的人并不是一个很好的做法:)@DanielSanchez我发现它在构建游戏时是实用且必要的。我已经编写了几个标题,我认为在函数中声明全局变量不是一个好的做法。通过在外部对它们进行范围界定(如果需要,也可以声明为全局),使它们成为全局的。这只是我的观点,你的代码也是另一个可行的选择:)我同意你@DanielSanchez的观点,不过这个脚本看起来有点像游戏,这个选择可能对它有好处。