Hallo Leute,
Nach dem ich vor einiger Weile am programmieren Lernen
Verzweifelt bin, habe ich mich dazu entschlossen es mit Python wieder auf zu nehmen!
Da ich noch die meisten Grundlagen aus meinem Buch im Kopf hatte, versuche ich mich momentan an einem eigenen Programm. Nun möchte ich eine Inventar funktion einbauen. So das ich nach dem "Inventar" eingegeben worden ist ein kleiner Text auftaucht, der soll in etwa so aus sehen:
×[Inventar von ~Name~]×
| Geld : 0
#Soweit klappt alles noch einfach da ich Geld als normal Variable ein bauen kann doch jetzt möchte ich die Items angeben die ich zu vor in einer Liste festgelegt hatte. Ich hoffe ihr versteht soweit wie ich mir das vorstelle Nun möchte ich einfach nur das die Items hinter einander aufgelistet werden, von mir aus auch zu erst ohne jegliche Deko. Doch mein nächstes Problem wäre dann wohl dahinter auch noch die Anzahl der Items unter zu bringen.
Am liebsten würde ich das mit einer Funktion machen.
Jedoch bin ich jeder art von Lösungsansatz dankbar.
Nett wäre es wenn man mir das mit der Listeund den Dazugehörigen input-codes sendet.
Danke
Ante.png
Liste mit Absätzen wieder geben!
@Antek_png: Offenbar sind doch nicht die nötigen Grundlagen im Kopf geblieben, denn der Umgang mit Listen, Zeichenketten, Schleifen, und das Definieren von Funktionen sind eigentlich elementar.
Zumal die Beschreibung in dem Beitrag, zumindest mir, keine Vorstellung davon verschafft, was Du da eigentlich *genau* machen willst, und wo es denn nun ganz *konkret* hakt‽
Zumal die Beschreibung in dem Beitrag, zumindest mir, keine Vorstellung davon verschafft, was Du da eigentlich *genau* machen willst, und wo es denn nun ganz *konkret* hakt‽
Du kannst es so machen wie in
viewtopic.php?f=1&t=39357#p300905.
Dann passende Namen wählen:
Token --> Gegenstand mit Name, Anzahl, Beschreibung, Wert, .... (statt id und text)
TokenListe --> Inventar
Dann in der Klasse Inventar eine Funktion 'schoen_ausgeben' programmieren,
die alles schön ausgibt.
viewtopic.php?f=1&t=39357#p300905.
Dann passende Namen wählen:
Token --> Gegenstand mit Name, Anzahl, Beschreibung, Wert, .... (statt id und text)
TokenListe --> Inventar
Dann in der Klasse Inventar eine Funktion 'schoen_ausgeben' programmieren,
die alles schön ausgibt.
Code: Alles auswählen
class Inventar(list):
def schoen_ausgeben(self):
for gegenstand in self:
print("Name: {0}\n Geld: {1}".format(gegenstand.name, gegenstand.geld))
Und auch hier wieder die Anmerkung von mir: Ich würde nicht von `list` erben. Denn dann muss man sich auch über alle Methoden/Operationen von `list` Gedanken machen ob die hier Sinn machen so wie sie funktionieren und sie gegebenenfalls so implementieren wie der Benutzer das erwartet. Das ist ein schneller Hack der auf den ersten Blick praktisch aussehen mag, der aber später Probleme machen kann. Ich denke Komposition gegenüber Vererbung zu bevorzugen ist mittlerweile „best practise“ in der objektorientierten Programmierung. Und hier sehe ich noch nicht einmal den Sinn einer Methode gegenüber einer einfachen Funktion.
Und spätestens wenn das Programm umfangreicher wird, möchte man ja nicht einmal die Programmlogik mit der Benutzerinteraktion vermischen, dann also erst recht nicht die grundlegenden Datenstrukturen.
Und spätestens wenn das Programm umfangreicher wird, möchte man ja nicht einmal die Programmlogik mit der Benutzerinteraktion vermischen, dann also erst recht nicht die grundlegenden Datenstrukturen.
@heiner88: Nö, das stimmt nicht! So lernt man normalerweise OOP. Normalerweise fängt man ja nicht mit Vererbung an sondern mit Klassen die von nichts (ausser vielleicht `object`) abgeleitet sind und die aus mehreren Bestandteilen zusammengesetzt sind → Komposition. Die typischen Beispiele 2D-Punkt/Ortsvektor, Auto, Bankkonto, …. Erst wenn man das verstanden hat, geht es zu Vererbung weiter.
Das Argument „zu schwierig für Anfänger“ trifft auch auf Deine Lösung zu, denn das kann man wie gesagt ganz ohne OOP mit einer einfachen Funktion ausdrücken. Anderseits ist es ein unsinniges Argument, denn *alles* ist zu schwierig bis man es denn mal gelernt hat. Ansonsten könnte man auch Funktionen weg lassen, oder ”Funktionen” ohne Argumente und Rückgabewerte und viel ``global`` verwenden und Wörterbücher weg lassen, weil Anfänger lieber ”dynamische Variablennamen” haben wollen. Wie gut das es `eval()` und `exec()` gibt. Sollte man jedem Anfänger wärmstens empfehlen.
Ich finde halt man sollte Anfängern keine Hacks andrehen die negative Folgen haben können, und schon gar nicht wenn es sauberere Lösungen gibt die nur geringfügig komplexer sind, oder wie in diesem Fall sogar *weniger* komplex.
Edit: Als einfache Funktion:
Das Argument „zu schwierig für Anfänger“ trifft auch auf Deine Lösung zu, denn das kann man wie gesagt ganz ohne OOP mit einer einfachen Funktion ausdrücken. Anderseits ist es ein unsinniges Argument, denn *alles* ist zu schwierig bis man es denn mal gelernt hat. Ansonsten könnte man auch Funktionen weg lassen, oder ”Funktionen” ohne Argumente und Rückgabewerte und viel ``global`` verwenden und Wörterbücher weg lassen, weil Anfänger lieber ”dynamische Variablennamen” haben wollen. Wie gut das es `eval()` und `exec()` gibt. Sollte man jedem Anfänger wärmstens empfehlen.
Ich finde halt man sollte Anfängern keine Hacks andrehen die negative Folgen haben können, und schon gar nicht wenn es sauberere Lösungen gibt die nur geringfügig komplexer sind, oder wie in diesem Fall sogar *weniger* komplex.
Edit: Als einfache Funktion:
Code: Alles auswählen
def inventar_ausgeben(inventar):
for gegenstand in inventar:
print("Name: {0}\n Geld: {1}".format(gegenstand.name, gegenstand.geld))
@heiner88: Nein. Nicht für diesen Fall. Allgemein. Für diesen Fall habe ich den Sinn einer Klasse insgesamt in Frage gestellt. Darum kann ich hier jetzt auch kein sinnvolles Beispiel für diesen Fall bringen weil ob nun Komposition oder Vererbung, beides ist eine unnötig aufgeplusterte Funktion.