2016-07-20 2 views
-2

Я иду через книгу LearnPythonTheHardWay, и я застрял на ex35. Я решил создать свою собственную игру, когда он спросил об учебных упражнениях. У меня есть функция gold_room, которая точно так же, как и его, но она вызывает ошибки заголовка для обоих кодов (его и моих).Локальная переменная, на которую ссылаются до назначения Python 3.4.5

def gold_room(): 

    print("You enter a room full of gold.") 
    print("Do you take the gold and run to the exit or you just walk out with nothing in your hands?") 

    choice = input("> ") 

    if choice == "take": 
     print("How much do you take?") 
     choice_two = input("> ") 

     if "0" in choice_two or "1" in choice_two: 
      how_much = int(choice_two) 
     else: 
      print("Man, learn to type a number.") 

     if how_much < 50: 
      print("You're not greedy. You win!") 
      exit(0) 
     else: 
      print("You greedy bastard!") 
      exit(0) 
    elif choice == "walk": 
     print("You're not greedy. You win!") 
     exit(0) 
    else: 
     print("I don't know what that means") 

UnboundLocalError: local variable 'how_much' referenced before assignment

ответ

2

Вы получаете эту ошибку, потому что вы обращаетесь к переменной how_much прежде, чем какое-либо значение присваивается ему. :)

Это происходит в строке: if how_much < 50:

На этой точке выполнения кода, определяется ли how_much или нет, зависит от того, предыдущее условие (if "0" in choice_two or "1" in choice_two:) или нет.

Код в письменном виде не имеет смысла; вы должны думать только о том, сколько how_much, если пользователь имеет, ввел число, которое должно определить это первое условие.

попробовать что-то вроде этого, вместо:

if "0" in choice_two or "1" in choice_two: 
    how_much = int(choice_two) 
    if how_much < 50: 
     print("You're not greedy. You win!") 
     exit(0) 
    else: 
     print("You greedy bastard!") 
     exit(0) 
else: 
    print("Man, learn to type a number.") 
+0

Через некоторое время цикл может помочь: В то время как choice_two не 0 или 1 запрос вход для choice_two снова и снова. –

+0

Большое вам спасибо! Теперь я получаю это (: – andzedd

+0

@andzedd Если этот ответ [адресованный вашей проблеме] (http://stackoverflow.com/help/someone-answers), пожалуйста, рассмотрите [его принятие] (http://meta.stackexchange.com/ вопросы/5234), нажав на галочку/галочку слева от ответа, превратив ее в зеленый цвет. Это означает, что вопрос удовлетворен вашим удовлетворением и присуждается [репутация] (http://stackoverflow.com/help/whats -решение) и вам, и человеку, который ответил. – MattDMo

Смежные вопросы