Python --Si le comportement de jugement de l'instruction dans plusieurs conditions (même si l'ordre est différent)

introduction

L'environnement est le suivant

bash


$ python3 --version
Python 3.6.8

Comportement de jugement de la déclaration if

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».

fin

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

Python --Si le comportement de jugement de l'instruction dans plusieurs conditions (même si l'ordre est différent)
Erreur d'importation même si Python est installé
Même si le langage de développement est changé en python3 dans Cloud9, la version 2 est affichée en python --version
[Pour les débutants] Comportement inattendu si "\" est inclus lors de la définition du chemin en Python
La réponse de "1/2" est différente entre python2 et 3
Instruction Python if
[Python] instruction if
Vérifiez si la chaîne est un nombre en python
[Noh up] Exécute même si le terminal est éteint
Le comportement de retrait de json.dumps est différent entre python2 et python3