Obwohl die Variable 'health' aus einem anderen Modul importiert wird, gibt die folgende Funktion den im Titel angezeigten Fehler aus. "Gesundheit" ist auch globalisiert und ich habe sowohl die Globalisierung als auch den Import der Variablen entfernt und bekomme immer noch denselben Fehler.Python - UnboundLocalError: Lokale Variable 'Gesundheit', auf die vor der Zuweisung verwiesen wird
Unten ist die Funktion, die das Problem verursacht.
def combat():
enemy_health = (random.choice(random_enemy_Health))
enemy_attack = (random.choice(random_enemy_Attack))
print("\nYou are fighting a" ,random.choice(enemies), "with an attack amount of" ,enemy_attack, "and a health amount of" ,enemy_health,".")
while health > 0 and enemy_health > 0:
if turn == 1:
while loop == False:
response=input()
try:
move = response("Do you want to attack or flee? Type '1' to attack and '2' to flee.")
move = int(move)
if move == 1:
enemy_health = enemy_health - attack
print("You attacked!")
loop = True
elif move == 2:
hub_travel()
print("You fled the battle, come back once you are stronger!")
loop = True
else:
print("Invalid number, try again")
continue
except:
print("Invalid number, try again")
continue
turn = 2
if turn == 2:
AImove = randint(1,2)
if AImove == 1:
print ("Enemy attacked!")
health = health - enemy_attack
turn = 1
continue
print ("game over!")
if enemy_health == 0:
print("The enemy has been defeated!")
gold += random.choice(gold_dropped)
Der Fehler tritt auf dieser Linie insbesondere:
while health > 0 and enemy_health > 0:
Sie müssen 'health' einen Wert zuweisen, bevor Sie prüfen, ob es größer als Null ist. Du machst das nicht. Die Fehlermeldung scheint mir ziemlich klar zu sein ... –
Wenn Sie den Wert von 'health' benötigen, der von einem anderen Modul gehört, müssen Sie es entweder als Parameter von einem Funktionsaufruf übergeben, der Zugriff auf diesen Wert hat, oder Sie müssen dieses Modul bereitstellen, um diesen Wert aufzurufen. Zum Beispiel könnten Sie ein Objekt haben, das den Status "Gesundheit" beibehält. In diesem Fall können Sie direkt darauf zugreifen oder eine Accessor-Funktion bereitstellen. –
In diesem Fall wäre "Gesundheit" eine intrinsische Eigenschaft von etwas wie einem Charakter, und man würde am besten ein Character-Objekt bereitstellen, das, anstatt seine "Gesundheit" anzugeben, einem anderen Objekt einen Weg bieten könnte. Dann wäre der Charakter verantwortlich für die Anwendung des Schadens auf sich selbst und zum Beispiel sterben, wenn Gesundheit <0 oder so ähnlich –