2
我正在尝试制作一个程序,用于计算6-9-20包中无法获得的最大对象数量(块)(我对python相当陌生,我试图使用全局和非本地,但它也不工作)。NameError:未定义全局名称'cb'
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号线,在 cant_buy(12) 文件 “C:\ Python33 \ OCW 6.00 \ ps2a.py” ,第22行,在cant_buy 返回cb NameError:全局名称'cb'未定义
出错了?我在elif语句中定义了它。
您的cb是在循环/分支语句中声明/分配的。 如果这些路径未被触及,则cb变量不会被创建。 – Anycorn
您是否尝试过函数内的代码?我尝试了掘金的开始,我得到了: >>> x = 6 >>> y = 9 >>> z = 20 >>>范围(0,n // x + 1) [ 0] >>>范围(0,N // Y + 1) [0] >>>范围(0,N // Z + 1) [0] 不是以为我就是你通缉。 – thefourtheye
如果您用您的意图逐行添加注释,我们可能会帮助您解决问题。我怀疑多个bug会导致cb保持未创建状态。 – thefourtheye