UnboundLocalError:局部变量在赋值前被引用 Python

4 投票
1 回答
8948 浏览
提问于 2025-04-18 14:13

我最近在使用“def”这个函数时遇到了一些麻烦。我知道这个问题已经有人问过了,但我觉得那个答案并没有解决我的疑问,而且我也不知道怎么把它应用到我的代码里。我正在用Python制作一个流行的游戏2048。简单来说,当我定义一个让整个棋盘向左移动的函数时,出现了一个错误:UnboundLocalError: local variable referenced before assignment。看起来我需要在某个地方定义“bone”和“btwo”这两个变量,而不是在全局范围内。但我还没弄明白怎么才能做到这一点。在我的moveleft()函数中设置参数也不管用,比如moveleft(bone, btwo)。所以我现在真的很困惑。

现在,我会把整个代码都贴出来,里面都有注释,但我觉得问题出在我定义moveleft()函数的地方。如果代码中还有其他不太好的地方,请告诉我。另外,尽量简单点,我对编程和相关术语真的不太在行。这是我写的第三个代码。

我知道我要求的有点多,但我真的非常非常希望能得到帮助。

代码:http://pastebin.ca/2824228

简化版本:

bone, btwo = 1, 2

def move_left():
    if bone == 1: print("bone is 1")
    if btwo == 2: print("btwo is 2")

    btwo = 3 
    bone = 2 

move_left()

1 个回答

3

如果你在一个函数里要修改全局变量,那么你需要明确告诉程序你要用的是全局变量。所以在你的函数的第一行加上这一句:

global bone, btwo, bthree, bfour, bfive, bsix, bseven, beight, bnine

另外,为什么不使用一个列表来代替定义9个变量呢?

撰写回答