# [Tutor] UnboundLocalError and Break

Corey Richardson kb1pkl at aim.com
Thu Oct 1 03:53:52 CEST 2009

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

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

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

-------------- next part --------------
A non-text attachment was scrubbed...
Name: kb1pkl.vcf
Type: text/x-vcard
Size: 55 bytes
Desc: not available
URL: <http://mail.python.org/pipermail/tutor/attachments/20090930/1de2d75c/attachment.vcf>
```