Seite 1 von 1

if elif

Verfasst: Mittwoch 25. Januar 2017, 18:56
von flip1982
[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

Re: if elif

Verfasst: Mittwoch 25. Januar 2017, 19:21
von 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.

Re: if elif

Verfasst: Mittwoch 25. Januar 2017, 20:22
von flip1982
Oh Danke!
habs geändert und läuft gut jetzt. :D