3

Soy un novato total en la programación y estoy haciendo mis primeros pinitos con Python. Y me he encontrado con un código a cuyo resultado no le encuentro explicación. El código es este:

x = -12

x -= 1 if x>0 else x+1

print(x)
# -1

Según lo entiendo debería imprimirse el resultado -11, pero como se ve me da -1. Lo he comprobado en diferentes programas y plataformas de Python e invariablemente me da -1, cosa que no puedo entender.

Sin embargo, si lo escribo de la siguiente manera

x = -12

x = x - 1 if x>0 else x+1

print(x)
# -11

sí me da el esperado resultado de -11. Entonces mi preguntas es: ¿no se supone que las expresiones "x -= 1" y "x = x -1" son equivalentes y deberían arrrojar el mismo resultado? ¿Por qué el primer código da el, para mí, inexplicable resultado de -1?

Un saludo.

1 respuesta 1

4

Esto:

x -= 1 if x>0 else x+1

Significa que se resta 1 si x es mayor que cero, sino x+1 (en este caso -11), entonces tu expresión queda

x -= -11

que es igual a decir

x = x - (-11)
# x = -12  - (-11) = -1 

Por otro lado

x = x - 1 if x>0 else x+1

Significa que se establece en x-1 si x es mayor que cero, sino en x+1, por lo que la expresión queda

x = x+1
# x = -12 +1 = -11

La expresión original:

x -= 1 if x>0 else x+1

Es equivalente a:

x = x - (1 if x>0 else x+1)

Notar los paréntesis, ahí radica la lógica de tu problema

3
  • Muchas gracias por tu precisa y didáctica respuesta, Yussef. Veo efectivamente dónde estaba el problema de mi lectura. ¿Puedo entonces sacar como conclusión que aunque las expresiones "x -= 1" y "x = x -1" son aritméticamente equivalentes pueden dar resultados diferentes cuando se convinan con otros elementos, por ejemplo un if? Commented el 12 may. 2023 a las 1:03
  • @Pepito es una forma innecesariamente complicada de establecer el número en -1 si es negativo sino restarle 1. Puedes verlo aquí. En ciertos casos, usar un shorthand if-else mejora la legibilidad. Pero en este la empeora.
    – Mateo
    Commented el 12 may. 2023 a las 3:23
  • Hola Pepito, no, las dos expresiones son aritmeticamente equivalentes y siempre van a dar el mismo resultado. En este caso -11 tal como explica la respuesta. El condicional lo que hace es decidir que operacion aplicas en function del valor de x.
    – Elerium115
    Commented el 12 may. 2023 a las 13:55

¿No es la respuesta que buscas? Examina otras preguntas con la etiqueta o formula tu propia pregunta.