Foros Python

Versión completa: No entiendo este código
Actualmente estas viendo una versión simplificada de nuestro contenido. Ver la versión completa con el formato correcto.
Buenos días.

Soy un completo novato en el mundo de la programación, o sea que quizás lo que plantee sea demasiado simple, pero es que no entiendo por qué este código me da como resultado "0".

x = -12
x-=1 if x>0 else x
print(x)

¿No debería ser -12, ya que al no cumplirse el if se ejecuta el else y este es "x = 12"?

Otra cosa que no entiendo con este código es que si en el else coloco "x + 1", para el valor x de cualquier número menor que "0" me da -1.

¿Alguien me puede ayudar con esto? Será una tontería pero me tiene loco.

Un saludo.
(11-05-2023, 08:59 AM)Pepito_Huevofrito escribió: [ -> ]Buenos días.

Soy un completo novato en el mundo de la programación, o sea que quizás lo que plantee sea demasiado simple, pero es que no entiendo por qué este código me da como resultado "0".

x = -12
x-=1 if x>0 else x
print(x)

¿No debería ser -12, ya que al no cumplirse el if se ejecuta el else y este es "x = 12"?

Otra cosa que no entiendo con este código es que si en el else coloco "x + 1", para el valor x de cualquier número menor que "0" me da -1.

Hola Pepito

El problema está en el "X-="
Cuando llamas al else no estás diciendo que el valor de x sea -12 sino que estás realizando una resta y, al ser X menor que cero, estás restando valores negativos.

Tu  x-=1 if x>0 else x se podría traducir por:

X = (x-1) SI x es > 0  Ó X = (x -x) SI x < 0

Voy a intentar explicarlo con ejemplos. Empezamos con un código similar al tuyo:

Código:
x-=1 if x>0 else -1


Código:
Si x= 12 ' Si el valor de x es positivo se resta uno

X = (x -1) = 11

Si  x = -12 ' Si el valor de x es negativo se suma uno

X = (-12 - -1) = (-12 + 1) = -11

En matemáticas cuando se restan dos valores negativos se realiza una suma.

En tu ejemplo....

Código:
x-=1 if x>0 else x

Si x = -12

x = (-12 - (- 12) = (-12 + 12) = 0

Cita:Otra cosa que no entiendo con este código es que si en el else coloco "x + 1", para el valor x de cualquier número menor que "0" me da -1

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


Cita:¿No debería ser -12, ya que al no cumplirse el if se ejecuta el else y este es "x = 12"?

No. Siguiendo tu ejemplo, para obtener ese -12 el código debería quedar así:

Código:
x-=1 if x>0 else 0


Otra opción más tradicional....

Código:
x= -12
if x>0 :
    x= x-1
else:
    x=x
print (x)



Espero que se entienda

Saludos
Muchas gracias por tu magnifica respuesta, Rafa, se entiende perfectamente. El error que estaba cometiendo es exactamente el que comentas: no me daba cuenta de que el "x-=" afecta al "else" de la misma manera que al "if". Y la verdad es que me tenía loco porque no encontraba de dónde salía el resultado. ChatGPT tampoco lo encontraba por cierto... Tu respuesta me ha sido de gran ayuda para aprender a interpretar el operador ternario, que sé que es algo muy básico pero vamos poco a poco. :-)

Un saludo