Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

"UnboundLocalError: local variable referenced before assignment" when incrementing variable in function [duplicate]

Tags:

python

I am getting this error and I've read other posts but they say to put global before dollars = 0 which produces a syntax error because it doesn't allow the = 0. I'm using dollars as a counter so I can keep track of what I add to it and display it back when needed.

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()

Error message:

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
like image 467
Justin Avatar asked Jul 08 '13 07:07

Justin


1 Answers

You need to add global dollars, like follows

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

Everytime you want to change a global variable inside a function, you need to add this statement, you can just access the dollar variable without the global statement though,

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.')

You also need to reduce the dollars, when you shop for something!

P.S - I hope you're using Python 3, you'll need to use raw_input instead.

like image 89
Sukrit Kalra Avatar answered Oct 19 '22 07:10

Sukrit Kalra