L'environnement est le suivant
bash
$ python3 --version
Python 3.6.8
S'il existe plusieurs expressions conditionnelles dans l'instruction if, elles sont traitées dans l'ordre à partir du début. Dans le cas de l'opérateur et, lorsqu'au moins une expression conditionnelle False est trouvée, La détermination ultérieure de l'expression conditionnelle n'est pas effectuée et la partie else est traitée.
Le code ci-dessous ne diffère que dans l'ordre des expressions conditionnelles dans l'instruction if, Il y aura une différence dans le résultat du traitement.
test.py
l = [0] * 3
# l = [0,0,0]
print("0 <= i <Lors du jugement de 3 en premier")
for i in range(4):
if 0 <= i < 3 and l[i] == 0:
print("i = {}Succès".format(i))
else:
print("i = {}Échec".format(i))
print("0 <= i <Lors du jugement 3 plus tard")
for i in range(4):
if l[i] == 0 and 0 <= i < 3:
print("i = {}Succès".format(i))
else:
print("i = {}Échec".format(i))
Cliquez ici pour le résultat de la sortie.
bash
$ python3 test.py
0 <= i <Lors du jugement de 3 en premier
i =0 succès
i =1 succès
i =2 succès
i =3 échec
0 <= i <Lors du jugement 3 plus tard
i =0 succès
i =1 succès
i =2 succès
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
"Lors de la détermination de 0 <= i <3 en premier",
Lorsque ʻi = 3, il devient Faux au moment du jugement de la première expression conditionnelle, "0 <= i <3
.
Le deuxième jugement «l [i] == 0» n'a pas été rendu.
En revanche, si "0 <= i <3 est jugé plus tard", Puisque le jugement de «l [i] == 0» est fait en premier, J'obtiens une erreur «index de liste hors limites» lorsque «i = 3».
Je l'ai trouvé en raison de la souffrance que l'exemple de code a réussi, mais mon code n'a pas réussi ... l'algorithme était le même.
Avec l'opérateur and, même une condition False devient False à un moment donné, il semble donc que les expressions conditionnelles suivantes ne soient pas traitées.
Étonnamment, il y avait peu d'articles qui abordaient ce genre de contenu, alors je l'ai résumé.
Recommended Posts