NameError:未定义全局名称“cb”

时间:2013-08-29 03:00:27

标签: python python-3.x nameerror

我正在尝试制作一个计算最大数量的对象(金块)的程序,你不能用6-9-20的软件包(我是python的新手,我尝试使用全局和非本地但它没有不管怎样。)

def nuggets(n):
    x = 6
    y = 9
    z = 20
    for i in range(0,n//x+1): 
        for j in range(0,n//y+1):
            for k in range(0,n//z+1):
                if i*x + j*y + k*z == n:
                    return [i,j,k]
    return None

def cant_buy(n):
    seq=0
    for i in range(n):
        p=nuggets(i)
        if type(p)== list:
            seq+=1
        elif type(p)== None:
            cb=i
            seq=0
    return cb

然后出现此错误: Traceback(最近一次调用最后一次):   文件“”,第1行,in     cant_buy(12)   文件“C:\ Python33 \ OCW 6.00 \ ps2a.py”,第22行,在cant_buy中     返回cb NameError:未定义全局名称“cb”

有什么问题?我在elif声明中定义了它。

1 个答案:

答案 0 :(得分:1)

当我运行您的代码时,我得到了一个稍微不同但可能更明确的错误消息。它说: " UnboundLocalError:局部变量' cb'在分配之前引用"

所以Python试图使用一个尚未知的变量。

宣布你的变量" cb"在你的循环中使用之前,如下所示:

def cant_buy(n):
    cb = 0  # <---- insert this
    seq=0
    for i in range(n):
        p=nuggets(i)
        if type(p)== list:
            seq+=1
        elif type(p)== None:
            cb=i
            seq=0
    return cb

应该这样做。