if elif

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
flip1982
User
Beiträge: 18
Registriert: Montag 4. April 2016, 15:36

[quote][/quote]Hallo,
is mir fast peinlich aber ich komm nicht drauf... hab jetzt den code vereinfacht, aber es liegt wohl an meiner if-schleife.

Code: Alles auswählen

aufnahmen =[ "L5","L4","L7","L8","XX"]
print aufnahmen

for e in aufnahmen:
    sensor = e
    print e

    if sensor == "L8":
        print "neuer sensor"
    elif sensor == "L7" or "L5" or "L4":
        print "alter sensor"
    elif sensor != "L7" or "L5" or "L4" or "L8":
        print "nix"
Ergebnis schuat dann folgendemasen aus:

Code: Alles auswählen

C:\User>python test.py
['L5', 'L4', 'L7', 'L8', 'XX']
L5
alter sensor
L4
alter sensor
L7
alter sensor
L8
neuer sensor
XX
alter sensor
Im Ergebnis nach XX müsste doch "nix" stehen.
ich hoffe mir ist zu helfen :K
Danke
BlackJack

@flip1982: Du hast ``or`` falsch verstanden. ``sensor == "L7" or "L5"`` ist immer *wahr* weil "L5" wahr ist. Das wird so ausgewertet: ``(sensor == "L7") or "L5"``. Auch wenn Sensor weder "L7" noch "L5" ist, ist das Ergebnis wahr, denn es wird erst der linke Operand von ``or`` ausgewertet. Dann ist es also ``False or "L5"`` und das Ergebnis davon ist "L5". Eine nicht-leere Zeichenkette ist im boole'schen Kontext wahr. ``or`` ist nicht umgangssprachlich zu verstehen, sondern als binärer Operator.

Du willst entweder die Ergebnisse zweier *Vergleiche* mit ``or`` verknüpfen, oder den ``in``-Operator verwenden:

Code: Alles auswählen

In [56]: sensor = 'XX'

In [57]: sensor == 'L7' or 'L5'
Out[57]: 'L5'

In [58]: sensor == 'L7'
Out[58]: False

In [59]: False or 'L5'
Out[59]: 'L5'

In [60]: bool('L5')
Out[60]: True

In [61]: sensor == 'L7' or sensor == 'L5'
Out[61]: False

In [62]: sensor in ['L7', 'L5']
Out[62]: False
Und das letzte ``elif`` sollte wohl einfach nur ein ``else:`` sein.
flip1982
User
Beiträge: 18
Registriert: Montag 4. April 2016, 15:36

Oh Danke!
habs geändert und läuft gut jetzt. :D
Antworten