UnboundLocalError - code is short & simple

P

pylearner

System Specs:

Python version = 2.6.1
IDLE
Computer = Win-XP, SP2 (current with all windows updates)

----------------------------------------------------------------------------------------

Greetings:

I have written code for two things: 1) simulate a coin toss, and 2)
assign the toss result to a winner. Code for the simulated coin toss
is in a file named "coin_toss.py." Code for the assignment of the
toss result is in a file named "toss_winner.py." Each file has one
simple function: 1) coin_toss(), and 2) toss_winner(), respectively.
(The code for each file is listed below.)


Problem:

I am getting an error when I run "toss_winner.py."


Error Message:

Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
toss_winner()
File "C:/Python26/toss_winner.py", line 7, in toss_winner
coin_toss = coin_toss()
UnboundLocalError: local variable 'coin_toss' referenced before
assignment


Question #1:

After reviewing the code below, does anybody know why I am getting
this error?


Explanation:

As I understand, the first statement of the toss_winner() function
body -- i.e. "coin_toss = coin_toss()" -- causes four things to
happen: 1) the coin_toss() function is called, 2) the coin_toss()
function is executed, 3) the coin_toss() function returns the value of
its local "coin_toss" variable, and 4) the returned value of the "coin
toss" variable that is local to the coin_toss() function is assigned
to the "coin toss" variable that is local to the toss_winner()
function.

Given this understanding, it seems I should NOT be getting a
"referenced before assignment" error, involving the "coin_toss" local
variable of "toss_winner()."


Note:

I am new to programming and Python. I'm currently self-studying
"Python Programming: An Intro to Computer Science" by Zelle.

Thanks!

---------------------------------------------------------------

# toss_winner.py

from coin_toss import coin_toss

def toss_winner():

coin_toss = coin_toss()

if coin_toss == "Heads":
toss_winner = "Player A"
print 'From "toss_winner" function >>',
print "Toss Winner = " + str(toss_winner)

else:
toss_winner = "Player B"
print 'From "toss_winner" function >>',
print "Toss Winner = " + str(toss_winner)

return toss_winner

---------------------------------------------------------------

# coin_toss.py

from random import random

def coin_toss():

random_number = random()

if random_number < .5:

coin_toss = "Heads"

print 'From "coin_toss" function >>',
print "Toss result = " + str(coin_toss)

else:

coin_toss = "Tails"

print 'From "coin_toss" function >>',
print "Toss result = " + str(coin_toss)

return coin_toss
 
F

Francesco Bochicchio

System Specs:

Python version = 2.6.1
IDLE
Computer = Win-XP, SP2 (current with all windows updates)

---------------------------------------------------------------------------­-------------

Greetings:

I have written code for two things:  1) simulate a coin toss, and 2)
assign the toss result to a winner.  Code for the simulated coin toss
is in a file named "coin_toss.py."  Code for the assignment of the
toss result is in a file named "toss_winner.py."  Each file has one
simple function:  1) coin_toss(), and 2) toss_winner(), respectively.
(The code for each file is listed below.)

Problem:

I am getting an error when I run "toss_winner.py."

Error Message:

Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    toss_winner()
  File "C:/Python26/toss_winner.py", line 7, in toss_winner
    coin_toss = coin_toss()
UnboundLocalError: local variable 'coin_toss' referenced before
assignment

Question #1:

After reviewing the code below, does anybody know why I am getting
this error?

Explanation:

As I understand, the first statement of the toss_winner() function
body -- i.e. "coin_toss = coin_toss()" -- causes four things to
happen: 1) the coin_toss() function is called, 2) the coin_toss()
function is executed, 3) the coin_toss() function returns the value of
its local "coin_toss" variable, and 4) the returned value of the "coin
toss" variable that is local to the coin_toss() function is assigned
to the "coin toss" variable that is local to the toss_winner()
function.

Given this understanding, it seems I should NOT be getting a
"referenced before assignment" error, involving the "coin_toss" local
variable of "toss_winner()."

Note:

I am new to programming and Python.  I'm currently self-studying
"Python Programming: An Intro to Computer Science" by Zelle.

Thanks!

---------------------------------------------------------------

# toss_winner.py

from coin_toss import coin_toss

def toss_winner():

    coin_toss = coin_toss()

    if coin_toss == "Heads":
        toss_winner = "Player A"
        print 'From "toss_winner" function >>',
        print "Toss Winner = " + str(toss_winner)

    else:
        toss_winner = "Player B"
        print 'From "toss_winner" function >>',
        print "Toss Winner = " + str(toss_winner)

    return toss_winner

---------------------------------------------------------------

# coin_toss.py

from random import random

def coin_toss():

    random_number = random()

    if random_number < .5:

        coin_toss = "Heads"

        print 'From "coin_toss" function >>',
        print "Toss result = " + str(coin_toss)

    else:

        coin_toss = "Tails"

        print 'From "coin_toss" function >>',
        print "Toss result = " + str(coin_toss)

    return coin_toss

You should not use the same name (e.g. coin_toss ) for the function
and the variable. Change one of the two, and things will go better.

Ciao
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,902
Latest member
Elena68X5

Latest Threads

Top