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 der main 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 Sie x werden global deklariert. Zu print 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.

InformationsquelleAutor Kaos | 2016-06-21
Schreibe einen Kommentar