Seite 1 von 1
Problem mit Vergleichsoperatoren (Anfänger-Frage)
Verfasst: Donnerstag 25. Januar 2018, 18:26
von Elemenope
Hallo,
um mein Problem zu verdeutlichen übertrage ich einfach mal was ich in die Kommandozeile angegeben habe und was der Output war (>>>):
string = "hi, welt"
string[2]
>>> ','
string[3]
>>>' '
string[2] != ','
>>> False
string[3] != ' '
>>> False
string[2] != (',' and ' ')
>>> True
string[3] != (',' and ' ')
>>> False
Das macht überhaupt keinen Sinn für mich.
Warum wird das ',' im zweiten Fall von unten nicht erkannt, obwohl das gleiche bei ' ' funktioniert?
Danke im voraus für eventuelle Hilfen.
Re: Problem mit Vergleichsoperatoren (Anfänger-Frage)
Verfasst: Donnerstag 25. Januar 2018, 18:44
von __deets__
Du kannst nicht mit and eine beliebige Menge an werten an einen Operator randekorieren. Das Muster dafuer ist
Der Grund, warum das scheinbar geht bei einem Fall ist einfach: and ist in Python aus historischen Gruenden etwas anders implementiert, als man es ewartet: bei
a and b
wird *nicht* True oder False zurueckggeben. Sondern a, wenn bool(a) == False, oder sonst b - damit ist der Gesamtwarheitswert dann in deinem Fall ' ', weil ein nicht-leerer String bool('oaeu') == True. Damit wird die rechte Seite zurueckgegeben.
Re: Problem mit Vergleichsoperatoren (Anfänger-Frage)
Verfasst: Donnerstag 25. Januar 2018, 18:49
von Sirius3
@Elemenope: »and« ist kein Umgangssprachliches »und«, wobei Anfänger meist ein Umgangssprachliches »oder« verwenden, als in der Art a ist gleich b oder c, sondern ein logischer Operator, dessen Ergebnis man ganz leicht selbst ausprobieren kann
Der Ausdruck »a and b and c« bedeutet, werte die Ausdrücke a,b,c solange aus, bis einer der Ausdrücke den boolschen Wert unwahr hat und gebe das als Ergebnis des Ausdrucks aus, oder, falls kein Ausdruck unwahr ist, den letzten, was bei Dir der Fall ist.
Re: Problem mit Vergleichsoperatoren (Anfänger-Frage)
Verfasst: Donnerstag 25. Januar 2018, 19:19
von Elemenope
@Deets und @Sirius3:
Danke für die Antworten.
Ich erweitere meine Frage jetzt mal. Ich hab das nämlich nicht einfach so ausprobiert, sondern hatte vor eine Funktion zu schreiben, die einen beliebigen String als Input (Text) bekommt und aus diesem String das erste Wort als Output gibt.
Dazu habe ich folgendes als Inhalt der Funktion probiert:
ltext = list(text)
text_len = len(text2)
text3 = []
for i in range(text_len):
if ltext != (‚.‘ and ‚,‘ and ‚ ‚):
text3 = text3 + list(ltext)
continue
else:
if ltext[i-1] != (‚.‘ and ‚,‘ and ‚ ‚):
break
else:
continue
text=‚‘.join(text2)
return text
—
(Dass die einfachen Anführungszeichen unten sind bitte ignorieren. Ich schreibe gerade mit dem Handy, da wird das automatisch so formatiert)
Nun meine Frage:
Abgesehen davon, dass es wahrscheinlich deutlich effizientere Wege gibt das Problem zu lösen und ich wahrscheinlich keine Listen Version von text hätte erstellen müssen:
Wie bringe ich den vorhandenen Code zum Laufen?
Was ich mit dem „and“ eigentlich vorhatte wird ja glaub ich klar.
Re: Problem mit Vergleichsoperatoren (Anfänger-Frage)
Verfasst: Donnerstag 25. Januar 2018, 19:22
von Sirius3
@Elemenope: Du willst wissen ob ein String in einer Menge an Strings enthalten ist, daher der `in`-Operator.
Zum Code: statt über einen Index iteriert man in Python direkt über die Elemente einer Liste. `continue` sollte man nur in Ausnahmen verwenden, weil es den Programmfluß kompliziert macht. Bei Dir sind sie komplett überflüssig. Die zweite if-Abfrage ist seltsam, weil Du ja dadurch nach maximal 2 Buchstaben abbrichst. Um ein Element an eine Liste anzuhängen, gibt es `append`. Du erzeugst ein text3, das Du nie benutzt.
Re: Problem mit Vergleichsoperatoren (Anfänger-Frage)
Verfasst: Donnerstag 25. Januar 2018, 19:25
von Elemenope
@Sirius3:
Alles klar, danke!
Ich probiere es zuhause mal aus.
Re: Problem mit Vergleichsoperatoren (Anfänger-Frage)
Verfasst: Donnerstag 25. Januar 2018, 19:49
von Kebap
Die geschweiften Klammern bei Sirius3 sollen vermutlich runde oder eckige Klammern sein.
Zumindest wüsste ich nicht, was ein Wörterbuch dort zu suchen hätte, besser Liste oder Tupel.
Re: Problem mit Vergleichsoperatoren (Anfänger-Frage)
Verfasst: Donnerstag 25. Januar 2018, 19:58
von Sirius3
@Kebap: geschweifte Klammern sind Mengen (set). Das ist genau das, was man logisch haben möchte. Dass man auch Listen, Tuple oder sonstige Iterierbare Objekte wie Strings verwenden könnte, ja das geht.