Ciertas condiciones evalúan de forma diferente de lo esperado en Python

votos
-1

Actualmente la creación de una pieza que toma valores de un valor dado en una matriz y añade 32

Mi IDE (PyCharm) recomendó que se quita una redundancia en el código haciendo lo siguiente:

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

a

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

Ambas soluciones funcionan para mí, pero tengo curiosidad de por qué esta disposición de condiciones se rompe

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

Te agradecería una explicación en pseudo-código si lo estima conveniente, sigo siendo un novato poco

Publicado el 13/02/2020 a las 23:55
fuente por usuario
En otros idiomas...                            


2 respuestas

votos
2

En el tercer código proporcionado por usted.

ascii_key[i] <= 65 >= 90esto siempre se evalúa a False.

ascii_key[i] <= 65 >= 90se evalúa como ascii_key[i] <= 65 and 65 >= 90. 65>=90es False.

Evaluación de código byte de 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

Evaluación de código byte de 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

Se puede observar observar a<b<ces equivalente a a<b and b<c.

Respondida el 14/02/2020 a las 00:00
fuente por usuario

votos
0

que se debe a la forma en que se resuelvan las condiciones. if ascii_key[i] >= 65 and ascii_key[i] <= 90y if 65 <= ascii_key[i] <= 90son equivalentes. Mientras if ascii_key[i] <= 65 >= 90se resuelve a esto: if ascii_key[i] <= 65 and 65 >= 90 65> = 90 no es cierto.

En primer lugar la condición 65 <= ascii_key[i]y luego la otra condición ascii_key[i] <= 90se evalúan y encadenados con un AND.

Salud

Respondida el 14/02/2020 a las 00:08
fuente por usuario

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