Calificación:
  • 0 voto(s) - 0 Media
  • 1
  • 2
  • 3
  • 4
  • 5
Ayuda con este ejercicio if/elif/else
#1
x = 1
y = 1.0
z = "1"

if x == y:
    print("one")
if y == int(z):
    print("two")
elif x == y:
    print("three")
else:
    print("four")

La cosa es que la salida que da el código es la siguiente:

one
two

Pero a pesar de que el último elif también es aceptable, python no lo toma en cuenta, mi pregunta es el porqué de ésto.

Muchas Gracias por su ayuda!
Responder
#2
Buenas. Python no toma el elif justamente porque es un elif. Para que lo tome, debería ser un if.

Debería ser así:

x = 1
y = 1.0
z = "1"

if x == y:
    print("one")
if y == int(z):
    print("two")
if x == y:
    print("three")
else:
    print("four")

Sólo así, te tomará la línea  if x == y:   ya que, si se trata de un elif, al darse la condición anterior ( if y == int(z): ) finiquita el código.
Responder
#3
(05-05-2023, 08:03 PM)Diego escribió: Buenas. Python no toma el elif justamente porque es un elif. Para que lo tome, debería ser un if.

Debería ser así:

x = 1
y = 1.0
z = "1"

if x == y:
    print("one")
if y == int(z):
    print("two")
if x == y:
    print("three")
else:
    print("four")

Sólo así, te tomará la línea  if x == y:   ya que, si se trata de un elif, al darse la condición anterior ( if y == int(z): ) finiquita el código.

Gracias por contestar! Aprecio tu respuesta pero todavía no entiendo porqué ( if y == int(z): ) finiquita el código? Qué quieres decir con esto?

Entonces supongo que "elif" es un mecanismo diferente a un normal if: else: ?
Responder
#4
Dos cuestiones a tener en cuenta:
1) Un "if" no necesariamente debe ir acompañado de un "else". Podríamos sólo poner el if sin el else y en ese caso, si la condición se cumple, se ejecutará un código. Y si no se cumple, no pasará nada (literalmente, nada).
2) "elif" es la abreviación de else + if. Teniendo esto presente, repasemos el condicional if.

x=10

if x>20:
print("x es mayor a 20")
else:
print("x es menor a 20")

En el ejemplo anterior, si x es mayor a 20, debe imprimr la leyenda "x es mayor a 20", pero resulta que x=10, con lo cual, al no cumplirse la condición expresa explícitamente en el if, pasa al else e imprime la leyenda "x es menor a 20". Se ejecuta todo el código, el if y el else (por no cumplirse la condición if).
Hasta ahí vamos bien.

Ahora, el caso contrario:

y=30

if y>20:
print("y es mayor a 20")
else:
print("y es menor a 20")

En esta situación, el print será "y es mayor a 20" ya que la condición del if se cumple. Y el código se finiquita (corta, interrumpe, sale del bucle condicional) sin tener en cuenta el else.


Y ahora viene el elif.

z=10

if z>20:
print(z es mayor a 20)
elif z==10:
print(z es igual a 10)
else:
print("no sé cuánto vale z")

En este caso, la primer condición no se cumple (z no es mayor que 20), entonces pasa a la segunda: else if (elif) y, como z=10 imprime la leyenda ("z es igual a 10"). Y corta el código sin tener en cuenta el else ya que encontró cumplida la condición previa.

En tu ejemplo:

if x == y:
    print("one")
if y == int(z):
    print("two")
elif x == y:
    print("three")
else:
    print("four")

La línea ( if x == y: ) se cumple, entonces imprime la leyenda correspondiente ("one") con lo cual el bucle se cierra (justamente por cumplirse la condición del "if").
Luego, el código continúa con otro condicional ( if y == int(z) ) y, como también se cumple esta condición, imprime "two" y sale del bucle, sin entrar ni en el elif, ni en el else que le siguen.
Cada vez que se cumpla la condición explícita en el condicional, el código sale del bucle (no tiene en cuenta, las opciones posteriores).


Te invito a jugar con el siguiente código, dándole valores diferentes a "x" para que veas cómo funciona:

x=20

if x>60:
    print("print del if")
elif x==50:
    print("print del elif")
else:
    print("print del else")

Saludos.
Responder
#5
Muchas Gracias Diego, te diste a entender a la perfección, Te lo agradezco!
Responder


Salto de foro:


Usuarios navegando en este tema: 3 invitado(s)