2015-12-03 2 views
0

Мой код выглядит следующим образом:Как я могу использовать функцию a_c_t_b()

def g_b(): 
    items_in_bag = [] 
    done=False 
    bugout_bag = 'Bug Out Bag' 
    while done == False: 
     item = input('What bags do you have? [Enter x to stop]') 
     items_in_bag.append(item) 
     if item == 'x': 
      done = True 
      items_in_bag.remove('x') 
      break 
     else: 
      continue 

    items_in_bag.append(bugout_bag) 
    print("Your bags\n") 
    print(items_in_bag) 
    return items_in_bag 

def g_c(): 
    coins_in_bag = [] 
    done=False 
    while done == False: 
     coin_item = input('What coins do you have? [Enter x to stop]') 
     if coin_item == 'x': 
      done = True 
      break 
     else: 
      coins_in_bag.append(coin_item) 
      continue 
    print("Your coins\n") 
    print(coins_in_bag) 
    return coins_in_bag 


def a_c_t_b(items_in_bag, coins_in_bag): 
    #print('Here are your coins:\n') 
    #g_c() 
    #print('Here are your bags:\n') 
    #print(items_in_bag) 
    print (items_in_bag,coins_in_bag) 
    return (items_in_bag,coins_in_bag) 

def main(): 
    g_b() 
    g_c() 
    a_c_t_b(items_in_bag,coins_in_bag) 

main() 

Однако, когда я запускаю этот код как: import myfile

Это дает мне ошибку:

File ".\myfile.py", line 51, i 
    a_c_t_b(items_in_bag,coins_in_bag) 
NameError: global name 'items_in_bag' is not defined 

Я просто пытаюсь вернуть значения items_in_bag,coins_in_bag из их соответствующих functions.

Спасибо

+2

Что происходит с этими именами функций? В любом случае, вы просто вызываете функции и отбрасываете результат. Вы должны фактически сохранить ссылки на вещи, если хотите их повторно использовать. Именование локальной переменной в функции автоматически не имеет глобальных эффектов, как вы думаете. – TigerhawkT3

+0

Возможно, вы воспользуетесь [официальным учебником Python] (https://docs.python.org/3.4/tutorial/index.html). – TigerhawkT3

ответ

1

Пожалуйста, позвоните ваши функции более осмысленные имена.

Чтобы ответить на ваш вопрос, функции g_b и g_c возвращают значения, они не возвращают имена. В точке, где вы звоните a_c_t_b, Python понятия не имеет, что такое items_in_bag, потому что yo'uve никогда не определял его. Python не может знать, что вы имеете в виду «значение, возвращаемое с g_b»: вы должны это сказать.

items_in_bag = g_b() 
coins_in_bag = g_c() 
a_c_t_b(items_in_bag, coins_in_bag) 
+0

Я скажу вам, ваши комментарии потрясающие на этом сайте, я многому научился у вас @ Даниэль - спасибо! – Jshee

1

Вы звоните g_b и g_c но никогда не поймать их возвращаемые значения.

Вы можете сделать:

def main(): 
    items_in_bag = g_b() 
    coins_in_bag = g_c() 
    a_c_t_b(items_in_bag, coins_in_bag) 

или:

def main(): 
     a_c_t_b(g_b(), g_c()) 
0

При импорте модуля main функция выполняется (вызов в последней строке). И main использование функции неопределенные идентификаторы items_in_bag и coins_in_bag:

def main(): 
    g_b() 
    g_c() 
    a_c_t_b(items_in_bag,coins_in_bag) 

Возможно, вы хотите что-то вроде

def main(): 
    items_in_bag = g_b() 
    coins_in_bag = g_c() 
    a_c_t_b(items_in_bag,coins_in_bag)