在assignmenttext-adventu之前引用的局部变量“location”

2024-10-01 09:18:34 发布

您现在位置:Python中文网/ 问答频道 /正文

作为我的第一个python项目,我正在进行文本冒险。我正在使用一个模板(来自youtube教程的复制代码)。但我不想创建一个游戏循环,我希望它是一个函数,当玩家输入命令时执行。(那部分正在工作)。 以下是教程中的代码:

文字冒险

bridge = ("Bridge", "You are on the bridge of a spaceship, sitting in the captains chair. ")

readyRoom = ("Ready Room" , "The captains ready room ")

lift = ("Lift" , "A turbolift that takes you throughout the ship. ")

transitions = {
    bridge: (readyRoom, lift),
    readyRoom: (bridge,),
    lift: (bridge,)
    }



location = bridge


while True:

    print (location[1])
    print ("You can go to these places: ")

    for (i, t) in enumerate(transitions[location]):
        print (i + 1, t[0])

    choice = int(input('Choose one: '))
    location = transitions[location][choice - 1]

这部分工作正常,但当我试图将其转换为函数时:

文字冒险

^{pr2}$

我收到错误消息:

UnboundLocalError: local variable 'location' referenced before assignment

我知道学习的最好方法是自己找到答案。我已经找了一段时间了,现在没有任何进展,任何帮助将不胜感激,谢谢。在


Tags: the函数代码inyou教程locationbridge
3条回答

谢谢你的帮助,我不认为我会保持这样,但它目前有效:

#Simplefied version:
a = 1
def foo():
    global a
    a = 3
    print a 
def getFoo():
    print a
print "foo results: "
foo()
print "getFoo results: "
getFoo()

印刷品:

^{pr2}$

我在从另一个函数调用“a”时遇到了困难,这就是为什么我要分别显示函数和结果。现在可以用了,谢谢

如果写入全局变量,则应使用global来声明它。 取而代之的是:

def travel():

把这个写下来:

^{pr2}$

这可以简化很多:

>>> a = 1
>>> def foo():
...    print a
...    a = 3
... 
>>> foo()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 2, in foo
UnboundLocalError: local variable 'a' referenced before assignment

发生什么事了

当python第一次在函数中看到a时,它是一个非局部变量(在本例中是全局变量)。不过,第二次,因为您要给它赋值,python认为它是一个局部变量,但是这个名称已经被一个全局变量占用了,这导致了错误。在

有几个解决方法可以将a声明为global,这样python就会知道当你说a = 3时,global变量{}是3。但就个人而言,我建议您在代码上多做一些修改,这样就不再需要全局变量了。如果您使用global,那么可能有更好的方法重构代码,这样您就不需要它了。在

相关问题 更多 >