2016-05-18 2 views
-2

Ich versuche, ein GUI-Wort-Ratespiel mit tkinter zu bauen. Ich erhalte eine UnboundLocalError: lokale Variable 'geschätzt' referenziert vor der Zuweisung für die Zeile 'if guess.get() in rate:'.Python GUI Word Ratespiel

Ich habe dies an der Spitze von meinem Code:

global guesses 
guesses = [] 

Und dies ist die Funktion, die die Fehler zu werfen:

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) 

ich mich verändert habe, wo Vermutungen ist Anwendungsbereich weisen, Ich habe es mehrmals neu definiert und nichts hat funktioniert. Ich bin mir nicht sicher, was ich noch tun soll, um diesen Fehler zu vermeiden.

Jede Hilfe würde sehr geschätzt werden. Vielen Dank!

Antwort

2

Verwenden Sie das Schlüsselwort global in den Methoden, die die globale Variable verwenden müssen.

Das heißt, setzen global guessesinnerhalb die play() Methode, statt außerhalb.

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

Lassen Sie sich nicht zu bequem dabei. Wenn Sie mehr Erfahrung mit Python haben, werden Sie wahrscheinlich irgendwann Klassen verwenden wollen, um Variablen zu speichern und darauf zuzugreifen, die zwischen Methoden geteilt werden müssen.

Schließlich, für zukünftige Fragen hier, bitte beachten Sie einen Titel, der das eigentliche Problem anstelle Ihrer weiteren Absichten zeigt. Sie werden eher hilfreiche Antworten auf diese Weise erhalten!