2013-08-29 1 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 

Затем появляется эта ошибка: Traceback (самый последний вызов последнего): Файл " ", строка 1, в cant_buy (12) Файл "C: \ Python33 \ ОКУ 6,00 \ ps2a.py" , строка 22, в cant_buy return cb NameError: глобальное имя 'cb' не определено

Что не так? Я определил его в заявлении elif.

+1

Ваш cb объявлен/назначен внутри операторов цикла/ветвления. Если эти пути не тронуты, переменная cb никогда не создается. – Anycorn

+0

Вы пробовали код внутри функции? Я попробовал начало самородков, и получил это: >>> x = 6 >>> y = 9 >>> z = 20 >>> range (0, n // x + 1) [ 0] >>> диапазон (0, п // у + 1) [0] >>> диапазон (0, п // г + 1) [0] Я не думаю, что это то, что вы разыскивается. – thefourtheye

+0

Если вы закомментируете свой код строкой с вашими намерениями, мы можем помочь вам исправить их. Я подозреваю, что несколько ошибок приводят к тому, что 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 

должен сделать трюк.

 Смежные вопросы

  • Нет связанных вопросов^_^