2017-02-13 4 views
1

Привет всем Я новичок в python, и я пытаюсь сделать свою собственную игру с текстом rpg. Я сделал метод для героя, чтобы делать покупки в магазине, но по какой-то причине, я получаю эту ошибку каждый раз, когда я прихожу в магазин:unboundLocalError: локальная переменная 'arm', указанная перед назначением?

nboundLocalError: local variable 'arm' referenced before assignment

Может кто-нибудь объяснить мне, что это значит, и как я могу исправить Это? благодаря

def shop(): 
     dagger = ('Dagger', 0, 5) 
     sword = ('Sword', 0, 10) 
     leather_hide = ('Leather Hide', 5, 0) 

     if IsShopLocked == True: 
      print("The shop is locked!\nPlease go back and continue your adventure!") 
     else: 
      print() 
      print("Welcome to the Larkville shop! What would you like to buy?\n1. Weapons\n2. armor\n3. Go back") 
      selection = int(input("Enter a value: ")) 

     if selection == 1: 

       print("Weapons shop") 
       print("1. Bronze Dagger: $7\n2. Bronze Sword: $50 3.Rusty Sword $60") 
       wpnselection= int(input("Enter a value: ")) 

     elif wpnselection == 1: 

       if hero.ac<20: 
        print("You donthave enough gold to buy this yet ") 
       main() 
     else: 


        hero.damage += 10 
        hero.ac -= 20 
        print("strength increased to: {}".format(hero.damage)) 
        main() 

     if wpnselection == 2: 
       if hero.ac<50: 
        print("You dont have enough gold to buy this yet...") 
        main() 
       else: 


        hero.damage += 16 
        hero.ac -= 50 
        print("strength increased to: {}".format(hero.damage)) 
        main() 


     elif wpnselection == 3: 
       if hero.ac<60: 
        print("You dont have enough gold to buy this yet...") 
        main() 
       else: 


        hero.damage += 28 
        hero.ac -= 60 
        print("strength increased to: {}".format(hero.damage)) 
        main() 

     elif selection == 2: 

       print ("Armor Shop") 
       print ("1. Leather hide 20$\n2. warmogs armor 30$") 
       arm = int(input("enter a value: ")) 

     if arm == 1: 

       if hero.ac<20: 
        print("You dont have enough gold!") 
       main() 
     else: 

       hero.hp += 20 
       hero.ac -= 20 
       print("Health increased to: {}".format(hero.health)) 

     if arm == 2: 

        if hero.ac<30: 
        print("You dont have enough gold!") 
     main() 
     if hero.ac>30: 
        leather_hide = Item('Leather Hide', 5, 0) 
        IsLeatherHideEquipped = True 
        hero.hp += 20 
        hero.ac -= 20 
        print("Health increased to: {}".format(hero.health)) 


     elif selection == 3: 
      main() 

ответ

2

Проблема заключается в том, что когда вы делаете:

if arm == 1: 
    # code 
if arm == 2: 
    # code 

вы не определили, что рука .. вы только определить arm в этой строке:

arm = int(input("enter a value: ")) 

, который находится в внутренний объем elif - что означает, что если он не достигнет этой точки, то arm действительно является локальной переменной, которая не была назначена, прежде чем что-либо сделать удар.

Может быть, что вы имели в виду, чтобы сделать то, что они if arm == 1: ... в SCODE в elif выше я не могу сказать, но я думаю, вы должны увидеть, как вы можете изменить свой код, чтобы содержать меньше кода Spagetti .. разделяющая в функции и, возможно классы.

+0

@ Андрей - А это поможет вам решить этот вопрос? –

0

Вы указали переменную arm внутри elif (внутренняя область), и вы пытаетесь использовать эту переменную из этой области. Здесь, То же самое происходит с другой переменной selection.

Если контроль не достигнет этих условий, ваши переменные не будут определены.

Вы можете сначала объявить эти переменные с None

def shop(): 
    dagger = ('Dagger', 0, 5) 
    sword = ('Sword', 0, 10) 
    leather_hide = ('Leather Hide', 5, 0) 
    selection=None 
    arm=None 
    #rest of the code. 
Смежные вопросы