2016-05-18 2 views
-2

Я пытаюсь построить игру с угадыванием слов GUI с помощью tkinter. Я получаю UnboundLocalError: локальная переменная «догадки», на которую ссылаются перед присвоением для строки «if guess.get() в догадках:».Python GUI Word Guessing Game

у меня есть это в верхней части моего кода:

global guesses 
guesses = [] 

И это функция, которая бросает ошибку:

def play(): 
    while remaining.get() > 0: 
     if guess.get().isalpha() == False or len(guess.get()) != 1: 
      output.set('Invalid input. Please enter a letter from a-z.') 
     else: 
      if guess.get() in guesses: 
       output.set('That letter has already been guessed!') 
      else: 
       if guess.get() not in secret_word: 
        output.set('That letter does not occur in the secret word.') 
       else: 
        output.set('That is a good guess! ' + str(guess.get()) + ' occurs ' + \ 
         str(countOccurences(str(secret_word), guess.get())) + ' time(s) in the secret word') 
        guesses += guess.get() 
        remaining.set(remaining.get() - 1) 

     if '_' not in getHint(secret_word, guesses): 
      result.set('Congratulations! You guessed the secret word: ' + str(secret_word)) 
      break 

    if remaining == 0: 
     result = 'Sorry, the secret word was: ' + str(secret_word) 

Я изменил где угадывает простор мудр, Я пересматривал его несколько раз, и ничего не сработало. Я не уверен, что еще нужно сделать, чтобы предотвратить эту ошибку.

Любая помощь была бы чрезвычайно оценена. Благодаря!

ответ

2

Используйте ключевое слово global в методах, которые должны использовать глобальную переменную.

То есть, global guessesвнутриplay() метод, а не вне его.

guesses = [] 
... 
def play(): 
    global guesses 
    while remaining.get() > 0: 
     if guess.get().isalpha() == False or len(guess.get()) != 1: 
      .... 

Не слишком удобно использовать это. По мере того как вы приобретаете больше опыта с Python, в какой-то момент вы, вероятно, захотите использовать классы для хранения и доступа к переменным, которые должны использоваться совместно.

И, наконец, для будущих вопросов, пожалуйста, подумайте над тем, чтобы использовать заголовок, который точно определяет фактическую проблему, а не ваши более широкие намерения. Скорее всего, вы получите полезные ответы!