2013-07-08 2 views
5

Я новичок в Python, и я никогда не изучал какой-либо другой язык программирования. Кажется, я получаю эту ошибку, и я читал другие сообщения, но они говорят, что нужно поставить global перед [dollars = 0], который выдает синтаксическую ошибку, потому что она не позволяет [= 0]. Я использую [доллары] в качестве счетчика, поэтому я могу отслеживать, что я добавляю к нему, и отображать его при необходимости. Может кто-нибудь мне помочь? Благодарю.UnBoundLocalError: Локальная переменная Ссылка перед назначением [Счетчик]

<> Код <>

dollars = 0 

    def sol(): 
     print('Search or Leave?') 
     sol = input() 
     if sol == 'Search': 
      search() 
     if sol == 'Leave': 
      leave() 

    def search(): 
     print('You gain 5 bucks') 
     dollars = dollars + 5 
     shop() 

    def leave(): 
     shop() 

    def shop(): 
     shop = input() 
     if shop == 'Shortsword': 
      if money < 4: 
       print('I\'m sorry, but you don\'t have enough dollars to buy that item.') 
       shop1() 
      if money > 4: 
       print('Item purchased!') 
       print('You now have ' + dollars + ' dollars.') 

    sol() 

<> Traceback <>

Traceback (most recent call last): 
    File "C:/Users/justin/Python/Programs I Made/Current/Testing.py", line 29, in <module> 
    sol() 
    File "C:/Users/justin/Python/Programs I Made/Current/Testing.py", line 7, in sol 
    search() 
    File "C:/Users/justin/Python/Programs I Made/Current/Testing.py", line 13, in search 
    dollars = dollars + 5 
UnboundLocalError: local variable 'dollars' referenced before assignment 
+0

Что должно произойти, если 'money == 4'? – glglgl

+2

Не могли бы вы выложить полную трассу? – TerryA

ответ

16

Вам нужно добавить global dollars, как следует

def search(): 
    global dollars 
    print('You gain 5 bucks') 
    dollars = dollars + 5 
    shop() 

Everytime вы хотите изменить global переменную внутри функции, вам нужно добавить это заявление, вы можете просто получить доступ к переменной dollar без global заявления, хотя,

def shop(): 
    global dollars 
    shop = input("Enter something: ") 
    if shop == 'Shortsword': 
     if dollars < 4:   # Were you looking for dollars? 
      print('I\'m sorry, but you don\'t have enough dollars to buy that item.') 
      shop1() 
     if dollars > 4: 
      print('Item purchased!') 
      dollars -= someNumber # Change Number here 
      print('You now have ' + dollars + ' dollars.') 

Вам также нужно уменьшить доллары, когда вы покупаете что-то!

P.S - Надеюсь, вы используете Python 3, вместо этого вам нужно будет использовать raw_input.

+2

Noo, не патч! Я использовал тысячу коротких слов! – TerryA

+0

@Haidro: Я бы тоже хотел сделать покупки. : P –

+0

Я сделал то, что было предложено, однако теперь он просто печатает. Вы получаете 5 долларов, а затем показывает пробел. По какой-то причине он не ходит в магазин. – Justin

1

Вам нужно положить global dollars, на линии по себе, внутри любой функции где вы изменить стоимость долларов. В коде, вы показали, что только в search(), хотя я предполагаю, что вы будете также хотеть сделать это внутри shop() вычесть значение элемента вы покупаете ...

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