Python-Fehler, variable 'nicht definiert'
den Fehler zurückgegeben:
NameError: name 'lives' is not defined
Weiß ich den code nicht so effizient, wie möglich, das ist eines meiner ersten Projekte, aber was auch immer ich versuche zu tun, diese Fehlermeldung erscheint, ich habe versucht, einen globalen, aber das hat nicht geholfen. Ich würde wirklich zu schätzen einige helfen, danke!
import random
import time
def main():
global guess,rand_num
win = False
rand_num = 45
lives = 10
while lives > 0 and win == False:
guess = int(input("Guess a number!"))
compare()
print("Well done!")
time.sleep(3)
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
def repeat():
replay = input("would you like to play again? Y/N")
if replay == "Y":
print("enjoy!")
main()
elif replay == "N":
"Goodbye then, hope you enjoyed!"
time.sleep(3)
os._exit
else:
print("please enter Y or N")
repeat()
main()
repeat()
EDIT: die Globale lebt in main() gibt den Fehler zurück:
UnboundLocalError: local variable 'lives' referenced before assignment
- Werfen Sie einen Blick auf @chepner Antwort. Die
global
Erklärung sollte in dermain
Funktion. Wenn Sie das tun, wird Ihr code funktioniert. - Allgemeine Empfehlung: meiden Sie Globale Variablen. Schreiben Sie Funktionen, keine Prozeduren. Python-Programmierer verwenden Häufig 4 Leerzeichen für die Einrückung.
- ich legte die global für alle 4, Leben, gewinnen, rand_num und denke, dass in beiden vergleichen() und main() und das schien geklappt zu haben, aber ich bin noch unsicher ist, ob alle 4 sind notwendig, oder welche gebraucht werden, wo. @Zondo
- warum ist die Vermeidung von globalen Variablen, die gute @Eli Korvigo? (p.s es war der einzige Weg, ich könnte herausfinden, wie es zu tun, im neu zu codieren wie ich schon in meiner Frage ;P)
- Sollten Sie deklarieren die variable "global", wenn Sie setzen es in die Funktion. Um
x = 4
Effekt der globalen namespace, müssen Siex
werden global deklariert. Zuprint x
Sie nicht. - so eine variable ändern muss ich es erklären, global, sondern drucken etc. Ich weiß nicht? (Danke übrigens, das ist helfen meine Allgemeinen Kenntnisse in Python eine Menge)
- Das ist richtig. Übrigens, das ändern eines änderbaren Objekts (wie
some_list.append(4)
), Sie brauchen nicht zu erklären, es global. Sie sind einfach übergeben Sie einen Befehl und nicht Sie neu zu definieren. - Vielen Dank! Ich glaube, ich verstehe es jetzt
- Hier ist eine gute Lektüre für Sie
- Und alle diejenigen, die Globale Variablen werden könnte (und sollte) Funktion Argumente. Die Funktionen sollten einige Eingaben und Ausgabe ohne mutierend den globalen Zustand. Was Sie hier haben einige hardcore prozeduralen Programmierung.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Definieren Sie die variable "Leben" außerhalb der Funktion main, dann ist jede Funktion, wo Sie wollen zu verweisen, dass die Globale variable, die Sie sagen "Globale Leben." Wenn Sie in eine Funktion und weisen Sie einen Wert zu einer variable, die es annimmt, ist es im lokalen Bereich. mit "internationales Leben" erzählt, die Funktion zu suchen, die auf globaler Ebene als Referenz lebt.
Du nicht erklären
lives
global innerhalbmain()
, so dass es lokal zu der Funktion.Wenn Sie es erklären, innerhalb der Funktion, Sie sind nur in dieser Funktion, Umfang, so deklarieren Sie Globale Variablen außerhalb der Funktionen und der code wird funktionieren.
Und jetzt diese funktioniert einwandfrei. Für mehr info über gloval vs lokale Variablen können Sie Lesen: http://www.python-course.eu/global_vs_local_variables.php