Certaines conditions différemment que prévu évaluent en Python

voix
-1

Actuellement la création d'une pièce qui prend des valeurs d'une valeur donnée dans un tableau et ajoute 32

Mon IDE (PyCharm) a recommandé que supprimer une redondance dans mon code en procédant comme suit

if ascii_key[i] >= 65 and ascii_key[i] <= 90:
    ascii_key[i] = ascii_key[i] + 32

à

if 65 <= ascii_key[i] <= 90:
    ascii_key[i] = ascii_key[i] + 32

Les deux solutions fonctionnent pour moi, mais je suis curieux de savoir pourquoi cet arrangement de conditions pauses

if ascii_key[i] <= 65 >= 90:
    ascii_key[i] = ascii_key[i] + 32

J'apprécierais une explication pseudo-code si pratique, je suis encore un novice peu

Créé 13/02/2020 à 23:55
source utilisateur
Dans d'autres langues...                            


2 réponses

voix
2

Dans le troisième code fourni par vous.

ascii_key[i] <= 65 >= 90ce qui est toujours évalué à False.

ascii_key[i] <= 65 >= 90est évaluée comme ascii_key[i] <= 65 and 65 >= 90. 65>=90est False.

Évaluation de bytecode a<b<c.

In [17]: dis.dis('a<b<c')
  1           0 LOAD_NAME                0 (a)
              2 LOAD_NAME                1 (b)
              4 DUP_TOP
              6 ROT_THREE
              8 COMPARE_OP               0 (<)
             10 JUMP_IF_FALSE_OR_POP    18
             12 LOAD_NAME                2 (c)
             14 COMPARE_OP               0 (<)
             16 RETURN_VALUE
        >>   18 ROT_TWO
             20 POP_TOP
             22 RETURN_VALUE

Évaluation de bytecode a<b and b<c.

In [18]: dis.dis('a<b and b<c')
  1           0 LOAD_NAME                0 (a)
              2 LOAD_NAME                1 (b)
              4 COMPARE_OP               0 (<)
              6 JUMP_IF_FALSE_OR_POP    14
              8 LOAD_NAME                1 (b)
             10 LOAD_NAME                2 (c)
             12 COMPARE_OP               0 (<)
        >>   14 RETURN_VALUE

Vous pouvez observer observer a<b<céquivaut à a<b and b<c.

Créé 14/02/2020 à 00:00
source utilisateur

voix
0

elle est due à la façon dont les conditions sont résolues. if ascii_key[i] >= 65 and ascii_key[i] <= 90et if 65 <= ascii_key[i] <= 90sont équivalents. Alors que if ascii_key[i] <= 65 >= 90se résoudre à ceci: if ascii_key[i] <= 65 and 65 >= 90 65> = 90 est jamais vrai.

Tout d' abord la condition 65 <= ascii_key[i]et l'autre condition ascii_key[i] <= 90sont évaluées et enchaînées avec un ET.

À votre santé

Créé 14/02/2020 à 00:08
source utilisateur

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more