# [Tutor] UnboundLocalError and Break

bob gailer bgailer at gmail.com
Thu Oct 1 04:13:52 CEST 2009

```Corey Richardson wrote:
> Here is my code that is being used/affected by the block that is
> erroring. The rest is superfluous, and does not affect it:

Something is screwy.
def monsAttk (damage, attack,playHp): # function expects 3 arguments
monsAttk(4, 15) # passes 2 arguments

That should raise TypeError: monsAttk() takes exactly 3 argument (2 given)
So something else is awry.
BTW the fact that you assigned playHp = 20 has no effect in the
function. You redefined playHp as a local variable in the def statement.
>
>    intel = 10  #Define the abilities.
>    strn = 10
>    con = 10
>    dex = 10
>    wis = 10
>    exp = 0
>    cha = 10
>    playHp = 20
>    melWep = 1 # A sword
>    rngWep = 1 #A bow
>    attack = dex+strn/2 #If they hit!
>    melDmg = strn+1+melWep/2 #Melee damage
>    deff = (con/3)+(dex/2)+6 #Defense
>    rngDmg = dex+1+rngWep/2 #Ranged damage
>    print "You are hiking through the woods one day, and you are jumped
>    by a goblin!" #The beginning of the adventure
>    print "Do you want to 1. Attack w/sword, 2. Attack w/bow, 3. Flee,
>    or 4. Nothing"
>    gob1Hp = 10 #First monsters hitpoints
>    def monsAttk (damage, attack,playHp): #A monsters attack         if
> attack > deff:  #Monster hit             playHp -= damage #Player
> takes damage (I think...I will have
>    to work that out)
>            print "You have sustained", damage, "damage, with",
>    damage-playHp, "remaining" #Inform player of their status
>          def gmAttack(monHp, monDef, monAgil) :  #A player attack
>        while op1 != "5":   #Just a loop that you can break out of
>    (possibly...working that out)             if op1 == '1': #Option 1
>                if attack + 10  > monDef : #If the player hits
>                    monHp-= melDmg  #Monster takes damage
>                    print "you did", melDmg, "damage! It now has",
>    monHp, "health left!" #Inform player how much health it has.
>                    monsAttk(4, 15) #Monster attacks             elif
> op1 == '2': #Option 2                 if attack + 10 >monDef: #If you
> hit the monster
>                    monHp -= rngDmg  #Monster takes damage
>                    print "you did", rngDmg, "damage! It now has",
>    monHp, "health left!"  #Inform player how much health it has
>                    monsAttk(4, 15) #Monster attacks
>            elif op1 == '3' : #Option 3
>                if attack + dex > monAgil : #If they can escape
>                    print "Thou hast fled!" #They have fled!
>                break #Stop the loop (I think. Can someone please inform
>    me as of how this works? I have looked online...it makes no sense
> to me)
>            elif op1 == '4' : #Option 4...the dumb one
>                monsAttk(4, 15)  #Monster attacks
>                monsAttk(4,15) #Monster attacks again, cause they are dumb
>                print "You should attack..." #Inform them of their
> stupidity
>            else : #Well, what the hell did they pick?
>                print "Unknown option, try again!" #Inform them they
>    didn't pick a valid option
>    while gob1Hp >= 0: #Well it is still alive
>        gmAttack(gob1Hp,13,15) #player attacks
>    if gob1Hp <= 0.5 : #if it dies
>        print "Gratz! You have gotten 5 exp! You only have", 100-exp,
>    "exp left till lv 1!" #print their experience
>        exp += 5 #Give them exp
>
>
> If you catch an error besides what is wrong, please don't point it
> out, as I would like to work it out myself, unless marked in the
> comments. But this one is evading me...I have playHp defined at the
> beginning, and I am getting this error :
>
>    Traceback (most recent call last):
>      File "C:\Users\Quick-Start\Documents\Python Doc's\Game_File.py",
>    line 183, in <module>
>        gmAttack(gob1Hp,13,15)
>      File "C:\Users\Quick-Start\Documents\Python Doc's\Game_File.py",
>    line 167, in gmAttack
>        monsAttk(4, 15)
>      File "C:\Users\Quick-Start\Documents\Python Doc's\Game_File.py",
>    line 157, in monsAttk
>        playHp -= damage
>    UnboundLocalError: local variable 'playHp' referenced before
> assignment
>
> get the game engine working, as of now, it is 30% done, with
> Inventory, Equipment, and a more sophisticated and simpler code to
> come. It's a bit of a mess now...
>
>
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> To unsubscribe or change subscription options:
> http://mail.python.org/mailman/listinfo/tutor
>

--
Bob Gailer
Chapel Hill NC
919-636-4239
```