Skip to main content
 首页 » 编程设计

python之NameError: 全局名称 'cb' 未定义

2025年05月04日11powertoolsteam

我正在尝试制作一个程序来计算你无法通过 6-9-20 的包获得的最大对象数( block )(我对 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 

然后出现这个错误: 追溯(最近一次通话): 文件“”,第 1 行,位于 买不起(12) 文件“C:\Python33\OCW 6.00\ps2a.py”,第 22 行,在 cant_buy 中 返回 cb NameError: 全局名称 'cb' 未定义

怎么了?我在 elif 语句中定义了它。

请您参考如下方法:

当我运行您的代码时,我收到了一条略有不同但可能更清晰的错误消息。它说: “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 

应该可以解决问题。