2

我正在尝试制作一个程序来计算使用 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 (most recent call last): File "", line 1, in cant_buy(12) File "C:\Python33\OCW 6.00\ps2a.py", line 22, in cant_buy return cb NameError: global名称“cb”未定义

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

4

1 回答 1

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

应该做的伎俩。

于 2015-08-19T23:08:36.697 回答