Vergleichen von Listen
-
- User
- Beiträge: 20
- Registriert: Montag 1. Oktober 2018, 12:35
Ich bemühe mich derzeit ein Programm zu schreiben, welches die Werte von Items in einem Spiel vergleicht. Diese Items sind Listen, welche verschiedenste Eigenschaften besitzen. Der Vergleich vollzieht sich jeweils innerhalb der übergeordneten Kategorien. Bedingung für die Zuordnung zu einer Kategorie ist die Vergleichbarkeit mit den enthaltenen Items. Die Frage, die ich mir nun stelle, ist folgende: Wie vergleiche ich Listen so, dass die Ausgabe aufzeigt, welches der verglichenen Items den höchsten Wert je vergleichbarem Objekt besitzt? Hierzu, so denke ich, wäre sicher eine "for"-Schleife notwendig. Doch es scheint mir viel sinnvoller, deshalb frage ich, dass es eine Funktion zum Vergleichen der Werte innerhalb der Listen gibt. Schließlich soll das Programm die Vergleiche selbst vornehmen, ohne dass ich die Berechnungen einzeln definiere. Ich denke dabei etwa an eine Funktion, die zwei Werte des gleichen Stamms miteinander vergleicht und ausgibt, in welchem Verhältnis diese zueinander stehen (==, <, >, etc.).
-
- User
- Beiträge: 20
- Registriert: Montag 1. Oktober 2018, 12:35
Bei zwei geordneten Listen sollte es möglich sein, mit zwei "for"-Schleifen die Werte in ihrer Reihenfolge zu vergleichen ohne die Objekte einzeln angeben zu müssen. Doch ich vermisse eine eingebaute "compare()"-Funktion, welche die Werte zweier "for"-Schleifen während ihres Durchlaufs vergleicht.
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
Ich habe so gar nicht verstanden was Du da machen willst. Einzig beim letzten Satz des ersten Beitrags musste ich spontan an die `cmp()`-Funktion in Python 2 denken. Die wurde in Python 3 aber abgeschafft.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 20
- Registriert: Montag 1. Oktober 2018, 12:35
Meine Überlegung ist, dass zwei vorab unabhängige "for"-Schleifen je Liste kreiert werden. Diese Schleifen enthalten keine Anweisungen (geht das? Wenn nicht, warum nicht?). Die "for"-Schleifen werden dann schließlich in einer Funktion verglichen. Die Funktion enthält alle möglichen Wertverhältnisse (geprüft mit "if-Statements" und anschließendem "break" gefolgt von der Ausgabe des Verhältnisses (>,<,==,..)).
- __blackjack__
- User
- Beiträge: 13100
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@epicpython: ``for``-Schleifen müssen mindestens eine ``pass``-Anweisung enthalten. Dann sind sie aber ziemlich sinnlos, ausser man braucht wirklich nur den Effekt das ein Iterator ”verbraucht” wird. Schleifen kann man nicht miteinander vergleichen. Das ist ja Code und keine Daten. Mir ist wie gesagt aus der Beschreibung immer noch nicht klar welches Problem da eigentlich gelöst werden soll.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
-
- User
- Beiträge: 20
- Registriert: Montag 1. Oktober 2018, 12:35
Alle Items (Listen) einer Kategorie sollen verglichen werden. Hierzu soll das erste Objekt einer Liste mit dem ersten Objekt einer anderen Liste verglichen werden usw. Der Vergleich soll aufzeigen, ob einer der Werte größer, kleiner oder gleich dem anderen Wert ist.
Beispiel:
Item1 besitzt:
300 Health Points
50 Physical Power
Item2 besitzt:
400 Health Points
50 Physical Power
Nach dem Vergleich soll aufgezeigt werden, dass der erste Wert des zweiten Items höher ist als der des ersten Items, sich die physische Kraft jedoch nicht unterscheidet. Das zweite Item wird anschließend als besser klassifiziert und das erste Item scheidet aus. Der Vergleich geht nun weiter mit dem zweiten und dritten Item.
Beispiel:
Item1 besitzt:
300 Health Points
50 Physical Power
Item2 besitzt:
400 Health Points
50 Physical Power
Nach dem Vergleich soll aufgezeigt werden, dass der erste Wert des zweiten Items höher ist als der des ersten Items, sich die physische Kraft jedoch nicht unterscheidet. Das zweite Item wird anschließend als besser klassifiziert und das erste Item scheidet aus. Der Vergleich geht nun weiter mit dem zweiten und dritten Item.
@epicpython: Du hast also Items mit Eigenschaften. Da ist eine Liste der falsche Datentyp. Ein Wörterbuch wäre besser geeignet. Wenn die Eigenschaften vorher definiert sind, ist ein Named-Tuple wohl am besten. Oder gleich eine eigene Klasse.
Dann willst Du eine Funktion schreiben, die zwei Items vergleicht, da ist mir noch unklar, was passieren soll, wenn eine Eigenschaft größer, die andere aber kleiner ist.
Was dann nach dem Vergleich passiert, ist mir noch unklar. Was soll „ausscheiden” bedeuten?
Dann willst Du eine Funktion schreiben, die zwei Items vergleicht, da ist mir noch unklar, was passieren soll, wenn eine Eigenschaft größer, die andere aber kleiner ist.
Was dann nach dem Vergleich passiert, ist mir noch unklar. Was soll „ausscheiden” bedeuten?
@epicpython: Deine Items haben Eigenschaften, lassen sich also besser als Objekte abbilden, denn als Listen. Auf Klassen kannst Du Methoden wie __gt__ anlegen, welche das Sortierverhalten definieren. Dann reicht ein einfaches sortieren einer Liste, um zum gewünschten Ergebnis zu kommen.