Seite 1 von 1
String Werte Vergleichen
Verfasst: Montag 27. Juli 2020, 17:09
von cap7ain
Hallo,
ich habe folgende Liste: Torjäger = [(„Robert“, „30“), („Cristiano“, „30“), („Ciro“,“30“)].
Nun möchte ich über eine for-Schleife(for x in Torjäger?) vergleichen ob [0], also die Namen meiner Torjäger unterschiedlich sind und [1], die geschossenen Tore, gleich sind.
Wenn dies der Fall ist soll die Funktion ein True Wert liefern, wenn nicht einen False Wert.
Leider habe ich trotz etlicher Versuche keine Lösung gefunden. Jegliche Versuche haben Fehlermeldungen aller Art ausgespuckt, eventuell weiß hier jemand wie ich das hinbekommen kann.
Danke!
Re: String Werte Vergleichen
Verfasst: Montag 27. Juli 2020, 17:27
von Sirius3
Was hast Du denn schon versucht? Zeige den Code dazu? Was ist da das Ergebnis und wie weicht das von Deinem erwarteten Ergebnis ab?
x ist ein schlechter Name für EINEN Torjäger und hier zeigt sich auch die Schwäche der deutschen Sprache, weil Jäger sowohl im Singular als auch im Plural gleich geschrieben wird. Im Englischen hätte die Liste einfach ein s hinten dran als Plural, an dem man erkennen kann, dass mehrere Torjäger in einer Liste gesammelt sind. Generell empfehle ich englische Bezeichner, da man dann beim Lesen nicht ständig zwischen deutschen Bezeichnern und englischen eingebauten Funktionen oder Schlüsselwörtern hin und her springen muß.
Warum sind die Zahlen Strings?
Re: String Werte Vergleichen
Verfasst: Montag 27. Juli 2020, 17:46
von cap7ain
Ist jetzt eine wenig hilfreiche Antwort. Meine Bezeichnungen darf ich ja wohl noch so wählen wie sie für mich am geschicktesten sind. Egal ob englisch oder deutsch.
Die Zahlen sind Strings weil ich diese zB ja durch Vereine austauschen könnte. Also players =[(„Timo“,“Chelsea“), („Mason“,“Chelsea“), („Matteo“, „Chelsea“)]
Dann habe ich zB versucht über
for player in players:
If player[0] != player+1[0] and player[1] == Player+1[1]:
Return True
Die Funktion zu schreiben. Aber ich weiß leider nicht wie ich die jeweils einzelnen Indexe so vergleiche das Player1 mit Player2 & Player3 verglichen wird etc.
Re: String Werte Vergleichen
Verfasst: Montag 27. Juli 2020, 18:39
von __blackjack__
@cap7ain: Am geschicktesten sind englische Bezeichner. Warum hat Sirius3 geschrieben.
Geschossene Tore sind Zahlen und sollten auch Zahlen sein. Das man die durch etwas mit einer ganz anderen Bedeutung und dann auch einem anderen Typ ersetzen kann ist keine gute Begründung Zahlen als Zeichenketten zu speichern.
`player` ist ein Tupel und ``player + 1`` wird natürlich mit einem Fehler quittiert. Was hättest Du an der Stelle denn erwartet was das Ergebnis eines Tupels mit zwei Zeichenketten + 1 sein sollte?
Gross- und Kleinschreibung spielt in Python eine Rolle. `player` ist ein anderer Name als `Player` und ``Return True`` ist ein Syntaxfehler weil das Schlüsselwort ``return`` heisst und `Return` ein Name ist und zwei Namen durch ein Leerzeichen getrennt machen keinen Sinn.
Für die beiden Teilprüfungen wäre der `set()`-Datentyp nützlich. Steck da alle Werte rein und überlegen wie viele Elemente das Ergebnis jeweils haben müsste.
Re: String Werte Vergleichen
Verfasst: Montag 27. Juli 2020, 18:41
von __deets__
Ich bin verwirrt. Ist das zweite Element jetzt die Mannschaft, oder die Anzahl der Tore?
Wie dem auch sei, die Loesung ist trivial:
Code: Alles auswählen
import itertools
import operator
torjaeger = [("Robert", "28"), ("Cristiano", "30"), ("Ciro", "30"), ("Overath", "1000")]
for _, entries in itertools.groupby(sorted(torjaeger, key=operator.itemgetter(1)), key=operator.itemgetter(1)):
print(list(entries))
Re: String Werte Vergleichen
Verfasst: Montag 27. Juli 2020, 19:10
von cap7ain
Es muss doch auch eine Lösung ohne das importieren von itertools geben? Ist schon etwas frech zu behaupten die Lösung sein „trivial“! Wenn sie das wäre würde ich mich nicht in diesem Forum melden. Nicht jeder hier wird auf dem gleichen Niveau sein...
Ob Tore, Mannschaften oder sonst etwas ist erstmal egal. Gehen wir mal nur von Strings aus und vergessen die Tore als integer. Das möchte ich gerne flexibel halten um die Funktion auf mehrere Listen anwenden zu können.
ich könnte auch die Indexe so ansprechen:
players = [(„Gareth“,“Real“), („Karim“,“Real“)]
if players[0][1] == players [1][1] and players [0][0] != players[1][0]:
return True
Aber das müsste ja über eine Schleife & Variable ja einfacher funktionieren bzw. so dass ich das unabhängig von der Länge der Liste verwenden kann & das ist immer noch die Lösung die ich suche...
Re: String Werte Vergleichen
Verfasst: Montag 27. Juli 2020, 19:16
von __deets__
Und was ist an der itertools Lösung das Problem?
Re: String Werte Vergleichen
Verfasst: Montag 27. Juli 2020, 19:19
von cap7ain
Wow...das Forum kann man sich auch sparen...
Ich bin einfach auf der Suche nach einer Lösung ohne itertools, da mein Python Niveau noch auf Anfänger Level ist & ich die itertools Schritte nicht nachvollziehen kann
Aber anscheinend ist es ja nicht gestattet & man muss sich hier wohl für alles rechtfertigen.
Re: String Werte Vergleichen
Verfasst: Montag 27. Juli 2020, 19:29
von __deets__
Wenn es schon Zuviel verlangt ist, das man erklärt, warum man einem Geschenkten Gaul ins Maul schauen muss, und auch ansonsten jeder Hinweis eine unerträgliche Zumutung ist - dann kann man sich die Interaktion mit dir definitiv auch sparen. Viel Erfolg.
Re: String Werte Vergleichen
Verfasst: Montag 27. Juli 2020, 19:33
von Sirius3
Am Anfang schriebst Du noch, dass Du prüfen willst, ob alle ersten Elemente unterschiedlich und alle zweiten Elemente gleich sind.
Dafür sind Sets ideal:
Code: Alles auswählen
player_names = set(n for n, g in players)
goals = set(g for n,g in players)
Jetzt mußt Du nur überlegen, was es für ein Set bedeutet, wenn alle Elemente gleich sind oder alle unterschiedlich.
Re: String Werte Vergleichen
Verfasst: Montag 27. Juli 2020, 19:38
von cap7ain
Ja richtig. Das möchte ich auch, mit Hilfe einer Funktion. Sets kenn ich auch noch nicht werde ich definitiv näher ansehen!
Dachte halt man könnte das anwählen der Elemente, um diese dann zu vergleichen, mithilfe von Index & For Schleifen „automatisieren“
Re: String Werte Vergleichen
Verfasst: Montag 27. Juli 2020, 19:52
von Sirius3
Einen Index zu benutzen ist im Normalfall kompliziert und fehleranfällig. Daher versucht man das zu vermeiden. Mit Schleife und Index ist es auch schwierig zu prüfen, ob alle Elemente unterschiedlich sind.
Re: String Werte Vergleichen
Verfasst: Montag 27. Juli 2020, 19:58
von cap7ain
Würde es theoretisch trotzdem gehen? Und wenn ja, wie würde eine Umsetzung in Code aussehen?