Python - Wenn das Verhalten der Anweisung unter mehreren Bedingungen beurteilt wird (obwohl die Reihenfolge unterschiedlich ist)

Einführung

Die Umgebung ist wie folgt

bash


$ python3 --version
Python 3.6.8

Beurteilungsverhalten der if-Anweisung

Wenn die if-Anweisung mehrere bedingte Ausdrücke enthält, werden sie in der Reihenfolge von vorne verarbeitet. Wenn im Fall des Operators und mindestens ein falscher bedingter Ausdruck gefunden wird, Die anschließende Bestimmung des bedingten Ausdrucks wird nicht durchgeführt, und der else-Teil wird verarbeitet.

Der folgende Code unterscheidet sich nur in der Reihenfolge der bedingten Ausdrücke in der if-Anweisung. Es wird einen Unterschied im Verarbeitungsergebnis geben.

test.py


l = [0] * 3
# l = [0,0,0]

print("0 <= i <Bei der Beurteilung von 3 zuerst")
for i in range(4):
    if 0 <= i < 3 and l[i] == 0:
        print("i = {}Erfolg".format(i))
    else:
        print("i = {}Fehler".format(i))

print("0 <= i <Bei der Beurteilung von 3 später")
for i in range(4):
    if l[i] == 0 and 0 <= i < 3:
        print("i = {}Erfolg".format(i))
    else:
        print("i = {}Fehler".format(i))

Klicken Sie hier für das Ausgabeergebnis.

bash


$ python3 test.py 
0 <= i <Bei der Beurteilung von 3 zuerst
i =0 Erfolg
i =1 Erfolg
i =2 Erfolg
i =3 Fehler

0 <= i <Bei der Beurteilung von 3 später
i =0 Erfolg
i =1 Erfolg
i =2 Erfolg
Traceback (most recent call last):
  File "test.py", line 13, in <module>
    if l[i] == 0 and 0 <= i < 3:
IndexError: list index out of range

"Bei der Bestimmung von 0 <= i <3 zuerst", Wenn "i = 3" ist, wird es zum Zeitpunkt der Beurteilung von "0 <= i <3" falsch, was der erste bedingte Ausdruck ist. Das zweite Urteil "l [i] == 0" wurde nicht gefällt.

Wenn andererseits "0 <= i <3 später beurteilt wird", Da das Urteil von "l [i] == 0" zuerst getroffen wird, Ich erhalte den Fehler "Listenindex außerhalb des Bereichs" mit "i = 3".

Ende

Ich fand es als Ergebnis des Leidens, dass der Beispielcode bestanden wurde, aber mein Code nicht bestanden wurde ... der Algorithmus war der gleiche.

Mit dem Operator und wird irgendwann sogar eine False-Bedingung zu False, sodass nachfolgende bedingte Ausdrücke anscheinend nicht verarbeitet werden.

Überraschenderweise gab es nur wenige Artikel, die sich mit dieser Art von Inhalten befassten, daher habe ich sie zusammengefasst.

Recommended Posts

Python - Wenn das Verhalten der Anweisung unter mehreren Bedingungen beurteilt wird (obwohl die Reihenfolge unterschiedlich ist)
Importfehler, obwohl ich Python installiert habe
Auch wenn die Entwicklungssprache in Cloud9 in Python3 geändert wird, wird Version 2 in Python - Version angezeigt
[Für Anfänger] Unerwartetes Verhalten, wenn beim Festlegen des Pfads in Python "\" enthalten ist
Die Antwort von "1/2" unterscheidet sich zwischen Python2 und 3
Python if-Anweisung
[Python] if-Anweisung
Überprüfen Sie, ob die Zeichenfolge eine Zahl in Python ist
[Noh up] Wird ausgeführt, auch wenn das Terminal ausgeschaltet ist
Das Einrückungsverhalten von json.dumps unterscheidet sich zwischen python2 und python3