2015-03-29 3 views
-3
words = [] 
words_needed = 0 


def input_words(): 
    inputWords = input('Please input more words that you want to play with.').lower() 
    words.append(inputWords) 
    words_needed += 1 
    while words_needed < 5: 
     input_words() 
    else: 
     words_needed >= 5 
     input_SS = input('Do you want to continue adding words?') 
     if input_SS == 'yes': 
      input_words() 
     elif input_SS == 'no': 
      end 

def Start_up(): 
    start_question = input('Do you want to add your own words to the list?') 
    if start_question == 'yes': 
     input_words() 
    elif start_question == 'no': 
     pre_words = (*words in a list*) 
     words.extend(pre_words) 


Start_up() 

Когда я запускаю этот сегмент кода, он либо убегает навсегда, что возвращает ошибку;Python 3.x: UnboundLocalError и Loop

Traceback (most recent call last): 
    File "F:\A453\Code\Python Hangman\Hangman.py", line X, in <module> 
    Start_up() 
    File "F:\A453\Code\Python Hangman\Hangman.py", line Y, in Start_up 
    input_words() 
    File "F:\A453\Code\Python Hangman\Hangman.py", line Z, in input_words 
    words_needed += 1 
UnboundLocalError: local variable 'words_needed' referenced before assignment 

Im достаточно новое для кодирования поэтому любая помощь была бы оценена

ответ

1

Позвольте мне объяснить проблему вам

Проблема с утверждением

words_needed += 1 

расширяется до

words_needed = words_needed + 1 

Таким образом, он создает локальную переменную внутри вашей функции, однако вы пытаетесь получить доступ к ее значению, когда вы делаете words_needed + 1, и, таким образом, выдает ошибку.

Вы опционам оставили

  • стандарт и точный способ.
    Определите функцию def input_words(words_needed): прохождения words_needed в качестве параметра, и где бы вы вызываете функцию называют его input_words(words_needed)

  • Bad и небезопасным способом.
    Добавить строку, global words_needed в начале вашей input_words функции

+1

Этот вопрос дает некоторые подробности: http://stackoverflow.com/questions/423379/using-global-variables-in-a -функции-другой, чем заместитель один, что созданные им- – dshepherd

0

Когда вы звоните words_needed+=1, вы пытаетесь получить доступ к переменной words_needed в области по местного, где оно не определено. Таким образом, вы должны пройти в и вернуть words_needed, поэтому он доступен везде:

words = [] 
words_needed = 0 


def input_words(words_needed): 
    inputWords = input('Please input more words that you want to play with.').lower() 
    words.append(inputWords) 
    words_needed += 1 
    while words_needed < 5: 
     input_words() 
    else: 
     words_needed >= 5 
     input_SS = input('Do you want to continue adding words?') 
     if input_SS == 'yes': 
      input_words() 
     elif input_SS == 'no': 
      return words_needed 
    return words_needed 

def Start_up(): 
    start_question = input('Do you want to add your own words to the list?') 
    if start_question == 'yes': 
     words_needed = input_words(words_needed) 
    elif start_question == 'no': 
     pre_words = (["words", "in", "a", "list"]) 
     words.extend(pre_words) 


Start_up() 
Смежные вопросы