我正在尝试制作一个计算最大数量的对象(金块)的程序,你不能用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声明中定义了它。
答案 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
应该这样做。