Die Umgebung ist wie folgt
bash
$ python3 --version
Python 3.6.8
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".
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