Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
No entiendo este código
#1
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.
Responder
#2
(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
Responder
#3
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
Responder


Salto de foro:


Usuarios navegando en este tema: 1 invitado(s)