Ich experimentiere gerade mit Python und programmiere ein kleines Text-Abenteuer. In meinem Spiel hat der Spieler bestimmte Eigenschaften wie HP, Angriffsschaden und Inventar-Slots für Gegenstände. Ich möchte diese Eigenschaften von überall in meinem Code aufrufen können. Dafür habe ich eine Funktion, die drei Werte erhält:Programmierung einer Funktion, die Werte in Python speichert und zurückgibt
„bearbeiten“: angeben, ob eine Variable sollte
„info_id“ bearbeitet werden: Sie bestimmen, welche Variable sollte
„Wert“ aufgerufen werden: der neue Wert für die Variable
Dies ist, wie es in meinem Code aussieht:
def player_info(edit, info_id, value):
if edit == 1:
##function wants to edit value
if info_id == 1:
player_hp = value
print ("Assigned hp to: ", player_hp)
##the "prints" are just to check if the asignments work -> they do
return player_hp
elif info_id == 2:
player_attack = value
print ("Assigned attack to: ", player_attack)
return player_attack
elif info_id == 3:
item_1 = value
return item_1
elif info_id == 4:
item_2 = value
return item_2
elif info_id == 5:
item_3 = value
elif edit == 0:
##function wants to retrieve value
if info_id == 1:
return player_hp
elif info_id == 2:
return player_attack
elif info_id == 3:
return item_1
elif info_id == 4:
return item_2
elif info_id == 5:
return item_3
es gibt tatsächlich 10 Artikel Slots (geht bis info_i d == 13) aber sie sind trotzdem alle gleich.
definiere ich alle Variablen am Anfang meines Code:
player_info(1,1,20)
player_info(1,2,5)
n=3
while n<=13:
player_info(1,n,0)
n=n+1
##items are not fully implemented yet so I define the item slots as 0
Die Definition funktioniert, ich wegen der Kontrolle „drucken“ sagen kann ich im Code implementiert. Wenn ich eine Variable, z. die Gesundheit wie folgt aus:
player_info(0,1,0)
Ich erhalte eine Fehlermeldung:
local variable 'player_hp' referenced before assignment
Ist die Funktion nicht die Variable speichern richtig? Oder was ist das Problem?
Gibt es eine bessere Möglichkeit, Variablen zu speichern? Sind globale Variablen in diesem Fall der richtige Weg?
Danke für die Hilfe!
Bitte formatieren Sie Ihren Code. Die Einrückung ist ein Durcheinander –
Ihre Funktion erstellt lokale Variablen mit dem Namen 'player_hp', etc, es ändert nicht die globalen Variablen mit dem gleichen Namen. Sie könnten das Schlüsselwort 'global' verwenden, damit die Funktion die globalen Variablen ändert, aber es wäre _much_ besser, eine Player-Klasse zu erstellen und eine Instanz dieser Klasse zum Speichern der Player-Informationen zu verwenden. –