if... elif... else... - Soluciones

Se ofrecen a continuación unas posibles soluciones de los ejercicios de if ... elif ... else ....

if ... elif ... else ... - 1

Sin tener en cuenta que el divisor no puede ser cero

Una posible solución es:

print("DIVISOR DE NÚMEROS")
dividendo = int(input("Escriba el dividendo: "))
divisor = int(input("Escriba el divisor: "))

if dividendo % divisor == 0:
    print(f"La división es exacta. Cociente: {dividendo // divisor}")
else:
    print(f"La división no es exacta. Cociente: {dividendo // divisor} "
          f"Resto: {dividendo % divisor}")

Aprovechando que un número distinto de cero se considera True, también se podría escribir:

print("DIVISOR DE NÚMEROS")
dividendo = int(input("Escriba el dividendo: "))
divisor = int(input("Escriba el divisor: "))

if dividendo % divisor:
    print(f"La división no es exacta. Cociente: {dividendo // divisor} "
          f"Resto: {dividendo % divisor}")
else:
    print(f"La división es exacta. Cociente: {dividendo // divisor}")

También se pueden hacer los cálculos antes del if:

print("DIVISOR DE NÚMEROS")
dividendo = int(input("Escriba el dividendo: "))
divisor = int(input("Escriba el divisor: "))

cociente = dividendo // divisor
resto = dividendo % divisor

if dividendo % divisor == 0:
    print(f"La división es exacta. Cociente: {dividendo // divisor}")
else:
    print(f"La división no es exacta. Cociente: {dividendo // divisor} "
          f"Resto: {dividendo % divisor}")

Se pueden escribir sentencias condicionales independientes, aunque no sea aconsejable hacerlo:

print("DIVISOR DE NÚMEROS")
dividendo = int(input("Escriba el dividendo: "))
divisor = int(input("Escriba el divisor: "))

if dividendo % divisor == 0:
    print(f"La división es exacta. Cociente: {dividendo // divisor}")
if dividendo % divisor != 0:
    print(f"La división no es exacta. Cociente: {dividendo // divisor} "
          f"Resto: {dividendo % divisor}")

Teniendo en cuenta que el divisor no puede ser cero

Si se quiere tener en cuenta que no se puede dividir por cero, no se pueden utilizar tres sentencias condicionales independientes. Se podrían utilizar sentencias anidadas:

print("DIVISOR DE NÚMEROS")
dividendo = int(input("Escriba el dividendo: "))
divisor = int(input("Escriba el divisor: "))

if divisor == 0:
    print("No se puede dividir por 0")
else:
    if dividendo % divisor == 0:
        print(f"La división es exacta. Cociente: {dividendo // divisor}")
    else:
        print(f"La división no es exacta. Cociente: {dividendo // divisor} "
              f"Resto: {dividendo % divisor}")

... o sentencias condicionales encadenadas:

print("DIVISOR DE NÚMEROS")
dividendo = int(input("Escriba el dividendo: "))
divisor = int(input("Escriba el divisor: "))

if divisor == 0:
    print("No se puede dividir por 0")
elif dividendo % divisor == 0:
    print(f"La división es exacta. Cociente: {dividendo // divisor}")
else:
    print(f"La división no es exacta. Cociente: {dividendo // divisor} "
          f"Resto: {dividendo % divisor}")

if ... elif ... else ... - 2

Una posible solución es la siguiente:

print("COMPARADOR DE NÚMEROS")
numero_1 = int(input("Escriba un número: "))
numero_2 = int(input("Escriba otro número: "))

if numero_1 > numero_2:
    print(f"Menor: {numero_2} Mayor: {numero_1}")
elif numero_1 < numero_2:
    print(f"Menor: {numero_1} Mayor: {numero_2}")
else:
    print("Los dos números son iguales")

if ... elif ... else ... - 3

Una posible solución es la siguiente:

print("COMPARADOR DE AÑOS")
fecha_1 = int(input("¿En qué año estamos?: "))
fecha_2 = int(input("Escriba un año cualquiera: "))

if fecha_1 > fecha_2:
    print(f"Desde el año {fecha_2} han pasado {fecha_1 - fecha_2} años")
elif fecha_1 < fecha_2:
    print(f"Para llegar al año {fecha_2} faltan {fecha_2 - fecha_1} años")
else:
    print("¡Son el mismo año!")

El siguiente programa tiene en cuenta cuando la diferencia entre fechas es únicamente un año:

print("COMPARADOR DE AÑOS")
fecha_1 = int(input("¿En qué año estamos?: "))
fecha_2 = int(input("Escriba un año cualquiera: "))

if fecha_1 - fecha_2 == 1:
    print(f"Desde el año {fecha_2} ha pasado 1 año")
elif fecha_1 > fecha_2:
    print(f"Desde el año {fecha_2} han pasado {fecha_1 - fecha_2} años")
elif fecha_1 - fecha_2 == -1:
    print(f"Para llegar al año {fecha_2} falta 1 año")
elif fecha_1 < fecha_2:
    print(f"Para llegar al año {fecha_2} faltan {fecha_2 - fecha_1} años")
else:
    print("¡Son el mismo año!")

El siguiente programa calcula la diferencia antes de evaluar las condiciones:

print("COMPARADOR DE AÑOS")
fecha_1 = int(input("¿En qué año estamos?: "))
fecha_2 = int(input("Escriba un año cualquiera: "))
diferencia = fecha_1 - fecha_2

if diferencia == 1:
    print(f"Desde el año {fecha_2} ha pasado 1 año")
elif diferencia > 1:
    print(f"Desde el año {fecha_2} han pasado {diferencia} años")
elif diferencia == -1:
    print(f"Para llegar al año {fecha_2} falta 1 año")
elif diferencia < -1:
    print(f"Para llegar al año {fecha_2} faltan {-diferencia} años")
else:
    print("¡Son el mismo año!")

if ... elif ... else ... - 4

Una posible solución es la siguiente:

print("COMPARADOR DE MÚLTIPLOS")
numero_1 = int(input("Escriba un número: "))
numero_2 = int(input("Escriba otro número: "))

if numero_1 >= numero_2 and numero_1 % numero_2 != 0:
    print(f"{numero_1} no es múltiplo de {numero_2}")
elif numero_1 >= numero_2 and numero_1 % numero_2 == 0:
    print(f"{numero_1} es múltiplo de {numero_2}")
elif numero_1 < numero_2 and numero_2 % numero_1 != 0:
    print(f"{numero_2} no es múltiplo de {numero_1}")
else:
    print(f"{numero_2} es múltiplo de {numero_1}")

El siguiente programa utiliza sentencias condicionales anidadas:

print("COMPARADOR DE MÚLTIPLOS")
numero_1 = int(input("Escriba un número: "))
numero_2 = int(input("Escriba otro número: "))

if numero_1 >= numero_2:
    if numero_1 % numero_2 != 0:
        print(f"{numero_1} no es múltiplo de {numero_2}")
    else:
        print(f"{numero_1} es múltiplo de {numero_2}")
else:
    if numero_2 % numero_1 != 0:
        print(f"{numero_2} no es múltiplo de {numero_1}")
    else:
        print(f"{numero_2} es múltiplo de {numero_1}")

El siguiente programa utiliza variables auxiliares que almacenan el número más grande y el más pequeño:

print("COMPARADOR DE MÚLTIPLOS")
numero_1 = int(input("Escriba un número: "))
numero_2 = int(input("Escriba otro número: "))

if numero_1 >= numero_2:
    mayor = numero_1
    menor = numero_2
else:
    mayor = numero_2
    menor = numero_1

if mayor % menor != 0:
    print(f"{mayor} no es múltiplo de {menor}")
else:
    print(f"{mayor} es múltiplo de {menor}")

if ... elif ... else ... - 5

En este ejercicio unas situaciones incluyen a otras (el caso "tres valores iguales" es un caso particular del caso "dos valores iguales"). En esos casos, el orden en que se comprueban las situaciones hace que las expresiones sean más o menos complicadas.


En el siguiente programa se trata primero el caso más complicado (dos números iguales), por lo que la primera condición es complicada. Hay que comprobar todos los casos posibles (que cualquier pareja de valores sean iguales y que el tercer número sea distinto). La condición está escrita entre paréntesis porque ocupa más de un línea.

print("COMPARADOR DE TRES NÚMEROS")
numero_1 = float(input("Escriba un número: "))
numero_2 = float(input("Escriba otro número: "))
numero_3 = float(input("Escriba otro número más: "))

if (numero_1 == numero_2 != numero_3 or numero_1 == numero_3 != numero_2 or
    numero_2 == numero_3 != numero_1):
    print("Ha escrito uno de los números dos veces.")
elif numero_1 == numero_2 == numero_3:
    print("Ha escrito tres veces el mismo número.")
else:
    print("Los tres números que ha escrito son distintos.")

En el siguiente programa el caso más complicado (dos números iguales) se deja para el final, para no tener que escribir la condición de ese caso

print("COMPARADOR DE TRES NÚMEROS")
numero_1 = float(input("Escriba un número: "))
numero_2 = float(input("Escriba  otro número: "))
numero_3 = float(input("Escriba  otro número más: "))

if numero_1 != numero_2 and numero_1 != numero_3 and numero_2 != numero_3:
    print("Los tres números que ha escrito son distintos.")
elif numero_1 == numero_2 == numero_3:
    print("Ha escrito tres veces el mismo número.")
else:
    print("Ha escrito uno de los números dos veces.")

En el siguiente programa, aunque el caso más complicado (dos números iguales) no se deja para el final, la condición correspondiente no es tan complicada como en el primer ejemplo, ya que la primera condición elimina los casos en los que los tres números son iguales y en la segunda condición simplemente se comprueba que haya dos iguales (no hace falta comprobar que el tercero sea distinto puesto que si fueran iguales se cumpliría la primera condición).

print("COMPARADOR DE TRES NÚMEROS")
numero_1 = float(input("Escriba un número: "))
numero_2 = float(input("Escriba  otro número: "))
numero_3 = float(input("Escriba  otro número más: "))

if numero_1 == numero_2 == numero_3:
    print("Ha escrito tres veces el mismo número.")
elif numero_1 == numero_2 or numero_1 == numero_3 or numero_2 == numero_3:
    print("Ha escrito uno de los números dos veces.")
else:
    print("Los tres números que ha escrito son distintos.")

Es importante señalar que mientras que en el primer y segundo programa se podrían intercambiar la primera y segunda condición y los programas seguirían funcionando, en el tercer programa no se podrían intercambiar la primera y segunda condición ya que el programa no daría la respuesta correcta al escribir tres valores iguales.

if ... elif ... else ... - 6

En este ejercicio la complejidad de las condiciones depende del orden en que se consideren los casos.

Una posible solución es la siguiente:

print("COMPROBADOR DE AÑOS BISIESTOS")
fecha = int(input("Escriba un año y le diré si es bisiesto: "))

if fecha %4 != 0:
    print(f"El año {fecha} no es un año bisiesto.")
elif fecha % 100 == 0 and fecha % 400 != 0:
    print(f"El año {fecha} no es un año bisiesto porque es múltiplo de 100 "
          f"sin ser múltiplo de 400.")
elif fecha % 4 == 0 and fecha % 100 != 0:
    print(f"El año {fecha} es un año bisiesto porque es múltiplo de 4.")
else:
    print(f"El año {fecha} es un año bisiesto porque es múltiplo de 400.")

Como algunos de estos casos están incluidos en otros (los múltiplos de 400 son múltiplos de 100 y los múltiplos de 100 son múltiplos de 4), las condiciones se pueden simplificar si se empieza por el caso más especial.

Si comprobamos en el primer caso si la fecha es múltiplo de 400, en el segundo caso no hace falta comprobar que la fecha no sea múltiplo de 400. Y de la misma manera, en el tercer caso no hace falta comprobar que la fecha sea múltiplo de 100.

print("COMPROBADOR DE AÑOS BISIESTOS")
fecha = int(input("Escriba un año y le diré si es bisiesto: "))

if fecha % 400 == 0:
    print(f"El año {fecha} es un año bisiesto porque es múltiplo de 400.")
elif fecha % 100 == 0:
    print(f"El año {fecha} no es un año bisiesto porque es múltiplo de 100 "
          f"sin ser múltiplo de 400.")
elif fecha % 4 == 0:
    print(f"El año {fecha} es un año bisiesto porque es múltiplo de 4.")
else:
    print(f"El año {fecha} no es un año bisiesto.")

En el programa anterior el orden en que se hacen las comprobaciones es muy importante. Si se reordenaran las sentencias sin modificar las condiciones, el programa fallaría.


El programa puede compactarse si no se detallan los motivos por los que un año es bisiesto y simplemente se responde si el año es bisiesto o no:

print("COMPROBADOR DE AÑOS BISIESTOS")
fecha = int(input("Escriba un año y le diré si es bisiesto: "))

if fecha % 400 == 0 or fecha % 100 != 0 and fecha % 4 == 0:
    print(f"El año {fecha} es un año bisiesto.")
else:
    print(f"El año {fecha} no es un año bisiesto.")

if ... elif ... else ... - 7

Para simplificar las condiciones es necesario considerar antes los casos más especiales. El primer caso es el caso más especial (ambos coeficientes nulos), el segundo caso es el siguiente más especial (el coeficiente "a" nulo) y el último el más general (ambos coeficientes no nulos).

Una posible solución es la siguiente:

print("ECUACIÓN A X + B = 0")
a = float(input("Escriba el valor del coeficiente a: "))
b = float(input("Escriba el valor del coeficiente b: "))

if a == b == 0:
    print("Todos los números son solución.")
elif a == 0:
    print("La ecuación no tiene solución.")
else:
    print(f"La ecuación tiene una solución: {- b / a}")

if ... elif ... else ... - 8

Para simplificar las condiciones es necesario considerar antes los casos más especiales. Las tres primeras son similares a las del ejercicio de la ecuación de primer grado (el término "a" es 0) y el orden es importante. Las tres últimas corresponden a ecuaciones de segundo grado propiamente dichas (el término "a" es distinto de 0).

Una posible solución es la siguiente:

print("ECUACIÓN A X² + B X + C = 0")
a = float(input("Escriba el valor del coeficiente a: "))
b = float(input("Escriba el valor del coeficiente b: "))
c = float(input("Escriba el valor del coeficiente b: "))

d = b*b - 4*a*c
if a == b == c == 0:
    print("Todos los números son solución")
elif a == b == 0:
    print("Sin solución")
elif a == 0:
     print(f"Una solución: {- c / b}")
elif d < 0:
    print("Sin solución real")
elif d == 0:
    print(f"Una solución: {- b / (2*a)}")
else:
    print(f"Dos soluciones: {(-b - d**0.5) / (2*a)} y "
          f"{(-b + d**0.5) / (2*a)}")

También se podrían utilizar condiciones anidadas:

print("ECUACIÓN A X² + B X + C = 0")
a = float(input("Escriba el valor del coeficiente a: "))
b = float(input("Escriba el valor del coeficiente b: "))
c = float(input("Escriba el valor del coeficiente b: "))

if a == b == c == 0:
    print("Todos los números son solución")
elif a == b == 0:
    print("Sin solución")
elif a == 0:
    print(f"Una solución: {- c / b}")
else:
    d = b*b - 4*a*c
    if d < 0:
        print("Sin solución real")
    elif d == 0:
        print(f"Una solución: {- b / (2*a)}")
    else:
        print(f"Dos soluciones: {(-b - d**0.5) / (2*a)} y "
              f"{(-b + d**0.5) / (2*a)}")

if ... elif ... else ... 9

print("CÁLCULO DE ÁREAS")
print("Elija una figura geométrica:")
print("a) Triángulo")
print("b) Círculo")
respuesta = input("¿Qué figura quiere calcular (Escriba T o C)? ")

if respuesta == "T" or respuesta == "t":
    base = float(input("Escriba la base: "))
    altura = float(input("Escriba la altura: "))
    print(f"Un triángulo de base {base} y altura {altura} "
          f"tiene un área de {base * altura / 2}")
elif respuesta == "C" or respuesta == "c":
    radio = float(input("Escriba el radio: "))
    print(f"Un círculo de radio {radio} tiene un área de "
          f"{3.141592 * radio**2}")

if ... elif ... else ... - 10

El siguiente programa escribe el resultado sin separadores y sea cual sea su valor:

print("CONVERTIDOR DE CM A KM, M Y CM")
centimetros = int(input("Escriba una distancia en centímetros: "))

kilometros = centimetros // 100000
metros = centimetros % 100000 // 100
resto = centimetros % 100

print(f"{centimetros} cm son {kilometros} km {metros} m {resto} cm")

El siguiente programa escribe el resultado sin separadores, escribiendo únicamente los valores distintos de cero:

print("CONVERTIDOR DE CM A KM, M Y CM")
centimetros = int(input("Escriba una distancia en centímetros: "))

kilometros = centimetros // 100000
metros = centimetros % 100000 // 100
resto = centimetros % 100

print(f"{centimetros} cm son ", end="")
if kilometros:
    print(f"{kilometros} km ", end="")
if metros:
    print(f"{metros} m ", end="")
if centimetros == 0 or resto:
    print(resto, "cm")

El siguiente programa escribe el resultado con comas como separadores, escribiendo únicamente los valores distintos de cero:

print("CONVERTIDOR DE CM A KM, M Y CM")
centimetros = int(input("Escriba una distancia en centímetros: "))

kilometros = centimetros // 100000
metros = centimetros % 100000 // 100
resto = centimetros % 100

print(f"{centimetros} cm son ", end="")
if kilometros:
    if metros or resto:
        print(f"{kilometros} km ", end="")
    else:
        print(f"{kilometros} km ")
if metros:
    if resto:
        print(f"{metros} m ", end="")
    else:
        print(f"{metros} m ")
if centimetros == 0 or resto:
    print(resto, "cm")

El siguiente programa escribe el resultado con comas y la conjunción "y" como separadores, escribiendo únicamente los valores distintos de cero y teniendo en cuenta el caso de 1 cm (escribe la respuesta en singular):

print("CONVERTIDOR DE CM A KM, M Y CM")
centimetros = int(input("Escriba una distancia en centímetros: "))

kilometros = centimetros // 100000
metros = centimetros % 100000 // 100
resto = centimetros % 100

if centimetros < 0:
    print("No se admiten valores negativos")
elif centimetros == 1:
    print("1 cm es 1 cm")
else:
    print(f"{centimetros} cm son ", end="")
    if kilometros:
        if (metros and resto == 0) or (metros == 0 and resto):
            print(f"{kilometros} km y ", end="")
        elif metros or resto:
            print(f"{kilometros} km, ", end="")
        else:
            print(f"{kilometros} km")
    if metros:
        if resto:
            print(f"{metros} m y ", end="")
        else:
            print(f"{metros} m")
    if centimetros == 0 or resto:
        print(resto, "cm")