Gut das habe ich anscheinend vergessen zu erklären. Ich dachte, das wäre nicht relevant.
Ich möchte die Spieler (Objekte) fürs nächste Mal fürs nächste mal speichern. Da ich ja ich ja nicht einfach ein Objekt in eine Datei zur Datenspeicherung schreiben kann und sich pickle und json nicht vertragen, kam ich auf die Idee, die einzelnen Objekte mit __dict__ in meine json Datei zu schreiben. Deswegen auch der ganze Mist mit:
Code: Alles auswählen
Spieler(uebergang['name'], uebergang['punkte'], uebergang['siege'], uebergang['spiele_jemals'])
uebergang habe ich genutzt um sozusagen das Value des Keys (Wenn vorhanden der Spielername) zu fokussieren und damit auf die einzelnen Attribute (niedergeschrieben mit __dict__) zugreifen zu können.
Der Name ist meiner Meinung nach nicht schlecht gewählt, da diese Funktion dazu dient die einzelnen Objekte nach Existenz zu checken. Die Funktion soll gucken, ob es schon ein Objekt mit dem eingegebenen Namen gibt...
Damit ist sind die if und else Blöcke auch nicht identisch. Im if Block wird ein Objekt anhand, dem Namen, hinterlegten Attributen erstellt. Deswegen auch dieses Komische:
Code: Alles auswählen
Spieler(uebergang['name'], uebergang['punkte'], uebergang['siege'], uebergang['spiele_jemals'])
Im else Block ein ganz Neues.
Nochmal zusammengefasst die Idee:
Die Funktion schaut in dem großen dictionary bestehend aus allen Spieler, die jemals am Spiel teilgenommen haben, (spieler_jemals_roh) nach, ob für diesen Namen jemals schon einmal ein Objekt erstellt wurde. Hier einmal das spieler_jemals_roh dictionary:
Code: Alles auswählen
"spieler_jemals": {"Justus": {"name": "Justus", "punkte": 70, "siege": 0, "spiele_jemals": 0}, "Klaus": {"name": "Klaus", "punkte": 55, "siege": 0, "spiele_jemals": 0}, "Jochen": {"name": "Jochen", "punkte": 87, "siege": 0, "spiele_jemals": 0}, "Peter": {"name": "Peter", "punkte": 0, "siege": 0, "spiele_jemals": 0}, "Matheo": {"name": "Matheo", "punkte": 0, "siege": 0, "spiele_jemals": 0}}
Wenn der Name gefunden wurde, und damit jemals schon einmal ein Spieler mit diesem namen existiert hat, wird der Spieler anhand den Daten von "Spieler" erstellt.
Wenn er allerdings nicht in dem Dictionary enthalten ist (elseBlock), wird ein komplett neuer Spieler mit Standartwerten erstellt. Damit sind die Blöcke ganz und gar nicht gleich...
Sirius3 hat geschrieben: Freitag 15. Juli 2022, 12:24
Variablen sollten immer nur einen Typ haben, `eingabe` ist mal ein String und mal ein Spieler.
Damit komme ich wieder zu meinem Problem: Hinter der Variable eingabe steckt ja das, was der Benutzer eingegeben hat. Mit dieser Eingabe möchte ich die Klasse erstellen. Die Klasse soll nicht spieler heißen, wie das bei dir der Fall wäre. Ich habe ja mehrere und die sollen einedeutig sein. Und da ich das mit dem, was hinter der eingabe steckt, erstellen will, stieß ich auf exec(). In meinen kleineren Programmen zum Ausprobieren hat das super funktioniert. Seitdem ich das in meinem Hauptprogramm in Funktionen stehen habe allerdings nicht mehr :/
Ich bin immer gerne offen für tips, aber ich währe ihnen auch sehr vertraut wenn sie mir bei diesem Lösungsansatz helfen könnten, auch wenn sie den vielleicht nicht als Besten sehen.