2013-08-29 167 views
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語句中定義了它。

+1

您的cb是在循環/分支語句中聲明/分配的。 如果這些路徑未被觸及,則cb變量不會被創建。 – Anycorn

+0

您是否嘗試過函數內的代碼?我嘗試了掘金的開始,我得到了: >>> x = 6 >>> y = 9 >>> z = 20 >>>範圍(0,n // x + 1) [ 0] >>>範圍(0,N // Y + 1) [0] >>>範圍(0,N // Z + 1) [0] 不是以爲我就是你通緝。 – thefourtheye

+0

如果您用您的意圖逐行添加註釋,我們可能會幫助您解決問題。我懷疑多個bug會導致cb保持未創建狀態。 – thefourtheye

回答

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 

應該做的伎倆。

相關問題