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