2016-06-19 9 views
0

Also ich bin ziemlich neu in Python und es scheint ein Problem mit meiner while-Schleife oder dem booleschen Gewinnwert zu sein, es fragt nach einer anderen Zahl auch nach i habe gewonnen. Es gibt auch ein Problem mit meiner Lebensvariablen, denn wenn ich eine falsche Antwort bekomme, kommt ein Fehler auf; "UnboundLocalError: lokale Variable 'lebt' referenziert vor Zuweisung" ps. die ‚zufällig‘ Zahl ist immer 45, so kann ich leicht lives variable pic while loop problem pic Import Zufall ImportzeitPython 3.5 - Number Picker Spiel, while loop & variables (Anfänger)

def compare(): 
if guess == rand_num: 
    print("You guessed correct!") 
    win = True 
elif guess > rand_num: 
    print ("Guess lower!") 
    lives = lives - 1 
else: 
    print ("Guess higher!") 
    lives = lives - 1 

win = False 
rand_num = 45 
lives = 10 
while lives > 0: 
if win == False: 
    guess = int(input("Guess a number!")) 
    compare() 
time.sleep(3) 
print("Well done!") 
+0

Funktionen sollten eine Trennung von Interesse haben. Ihre Vergleichs-Methode ist eigentlich compareAndPrintAdjustLivesAndSetWinCondition(). Erwäge, einen Vergleich zu schreiben, der -1, 0, 1 zurückgibt. Basierend darauf, wer auch immer es genannt hat, drucke und passe die Leben an. Keine Globals mehr, Trennung von Sorgen, saubererer Code. – Halsafar

+0

Sie sollten immer die Fehlermeldung in Ihrer Frage angeben. – Matthew

Antwort

0

Zu Beginn Ihrer Vergleichsfunktion fügen Sie die Zeile global lives zu sortieren, Probleme zu gewinnen.

Der Fehler, den Sie erhalten local variable lives referenced before assignment bedeutet, dass Sie auf eine lokale Variable zugreifen, aber diese Variable nicht vorhanden ist. In diesem Fall müssen Sie Python mitteilen, dass die Variable nicht lokal ist, sondern eine globale Variable.

Dies würde nicht passieren, wenn Sie keinen Wert zuweisen (zum Beispiel nur print(lives) im Funktionsvergleich. In diesem Fall würde der Python-Interpreter den globalen Wert verwenden. Die Tatsache, dass Sie der Variablen zuweisen Ursache Python behandelt es als eine lokale Variable, und um die Zuweisung durchzuführen, müssen Sie lives - 1 berechnen, bevor Sie einen beliebigen Wert zugewiesen haben Die Zeile global lives verursacht, es die Variable in dem Modul zu verwenden, anstatt eine lokale Variable zu erstellen

-1

Fügen Sie zuerst globale Leben am Anfang Ihrer Funktion hinzu und dann die if-Anweisung wie folgt in einen Teil der while-Schleife:

def compare(): 
    global lives,win 
    if guess == rand_num: 
     print("You guessed correct!") 
     win = True 
    elif guess > rand_num: 
     print ("Guess lower!") 
     lives = lives - 1 
    else: 
     print ("Guess higher!") 
     lives = lives - 1 
win = False 
rand_num = 45 
lives = 10 
while lives > 0 and win == False: 
    guess = int(input("Guess a number!")) 
    compare() 
time.sleep(3) 
print("Well done!") 
0

Im Moment ist es selbstverständlich, dass die Funktion "compare" weiß, welche Variablen zu verwenden sind. Funktionen wissen nicht, welche Werte verwendet werden sollen, wenn Sie diese Variablen nicht explizit definieren oder bereitstellen. Um Ihren Code zu reparieren, sollten Sie schreiben:

def compare(guess, lives, rand_num): 
    ... 

anstelle von compare() ohne Argumente. Dann in der while-Schleife anstelle des Aufrufs „vergleichen()“, würden Sie die beiden Variablen auf die Funktion wie so passieren:

compare(guess, lives, rand_num) 

Sie müssen auch sicherstellen, dass die while-Schleife bricht, wenn man so gewinnen dass es nicht für immer läuft. Ihre While-Schleife sollte nun wie folgt aussehen:

while lives>0: 
    if win==False: 
     guess = int(input("Guess a number!")) 
     compare(guess, lives, rand_num) 
    if win==True: #you could also write "if win:" 
     break 

Auf diese Weise endet Ihre Schleife, wenn Sie gewinnen.