Python: Warum ist hier 'if' immer falsch?

 - (Computer, programmieren, Informatik)

4 Antworten

Du musst den Vergleich wiederholen:

if Set != "1 1" or Set != "1 2" or Set != "1 3":

Der Vergleichsoperator != vergleicht immer nur mit einem Objekt. Es wird also Set mit "1 1" verglichen und die restlichen Strings als Bool-Werte evaluiert. Strings, die nicht leer sind, werden dabei immer zu True ausgewertet.

Weil du bei jedem or auch einen Vergleich anstellen muss.

So wie es jetzt ist, wird geprüft ob Set !? "1 1" ist und dann ob "1 1" "1 2" entspricht. Und so weiter, deshalb auch false.

Du müsstest so vorgehen:

if Set != "1 1" or Set != "1 2"...
Woher ich das weiß:Studium / Ausbildung – Fachinformatiker /Anwendungsentwicklung

Danke!

0

Nun ja, du betrittst den Körper IMMER

Denn was du machst, ist anders gesagt:

if Set != "1 1":
  print()

elif "1 2":
  print()

#...

else "3 3":
  print()

Da schon dein "1 2" auf jeden Fall NICHT dem leeren String entspricht und damit wahr ist, wird es ausgegeben ...

EDIT:

um das zu fixen, könntest du zwei Lösungen verwenden:

if Set != "1 1" or Set != "1 2" or ... or Set != "3 3":

oder

if Set not in ("1 1", "1, 2", ... "3 3"):
if Set != "1 1" or Set != "1 2" or ... or Set != "3 3":

Außerdem ist "or" hier die falsche Verknüpfung. Selbst wenn Set == "1 1" gilt, ist dann auf jeden Fall Set != "1 2" und man landet doch wieder im inneren Block.

0
@MagicalGrill

stimmt natürlich. ist mir beim schnellen hinschreiben entgangen. Durch "or" wird der Block betreten, wenn eins davon wahr ist.

Also wäre "or" nur dann Korrekt, wenn man == statt != nutzt.

Alternativ alle or durch and ersetzen

0

Ich glaube weil or Ausdrücke vergleicht. Spricht du überprüfst(vereinfacht) ob

(Set != "1 1") or "1 2"

Und Strings geben immer true zurück. Daher ist dieser Ausdruck true.

Was möchtest Du wissen?