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 la siguiente:

def main():
    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}"
        )


if __name__ == "__main__":
    main()

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

def main():
    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}")


if __name__ == "__main__":
    main()

También se pueden utilizar variables auxiliares y hacer los cálculos antes del if:

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

    cociente = dividendo // divisor
    resto = dividendo % divisor

    if resto == 0:
        print(f"La división es exacta. Cociente: {cociente}")
    else:
        print(f"La división no es exacta. Cociente: {cociente} Resto: {resto}")


if __name__ == "__main__":
    main()

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

def main():
    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}"
        )


if __name__ == "__main__":
    main()

División por 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:

def main():
    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 cero.")
    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}"
            )


if __name__ == "__main__":
    main()

... o sentencias condicionales encadenadas:

def main():
    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 cero.")
    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 __name__ == "__main__":
    main()

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

Una posible solución es la siguiente:

def main():
    print("COMPARADOR DE NÚMEROS")
    numero_1 = float(input("Escriba un número: "))
    numero_2 = float(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 __name__ == "__main__":
    main()

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

Sin tener en cuenta que la diferencia puede ser un año

Una posible solución es la siguiente:

def main():
    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!")


if __name__ == "__main__":
    main()

Teniendo en cuenta que la diferencia puede ser un año

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

def main():
    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!")


if __name__ == "__main__":
    main()

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

def main():
    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 __name__ == "__main__":
    main()

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

Sin tener en cuenta que no se deben escribir valores negativos o nulos

Una posible solución es la siguiente:

def main():
    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}.")


if __name__ == "__main__":
    main()

El siguiente programa utiliza sentencias condicionales anidadas:

def main():
    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}.")


if __name__ == "__main__":
    main()

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

def main():
    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 __name__ == "__main__":
    main()

Teniendo en cuenta que no se deben escribir valores negativos o nulos

Una posible solución es la siguiente:

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

    if numero_1 == 0 or numero_2 == 0:
        print("Lo siento, este programa no admite valores nulos.")
    elif numero_1 < 0 or numero_2 < 0:
        print("Lo siento, este programa no admite valores negativos.")
    elif 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}.")


if __name__ == "__main__":
    main()

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.

def main():
    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.")


if __name__ == "__main__":
    main()

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

def main():
    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.")


if __name__ == "__main__":
    main()

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).

def main():
    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.")


if __name__ == "__main__":
    main()

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:

def main():
    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 sin ser múltiplo de 100.")
    else:
        print(f"El año {fecha} es un año bisiesto porque es múltiplo de 400.")


if __name__ == "__main__":
    main()

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.

def main():
    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 sin ser múltiplo de 100.")
    else:
        print(f"El año {fecha} no es un año bisiesto.")


if __name__ == "__main__":
    main()

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:

def main():
    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 __name__ == "__main__":
    main()

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:

def main():
    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 __name__ == "__main__":
    main()

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:

def main():
    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 c: "))

    d = b * b - 4 * a * c
    if a == b == c == 0:
        print("Todos los números son solución.")
    elif a == b == 0:
        print("La ecuación no tiene solución.")
    elif a == 0:
        print(f"La ecuación tiene una solución: {- c / b}")
    elif d < 0:
        print("La ecuación no tiene solución real.")
    elif d == 0:
        print(f"La ecuación tiene una solución: {- b / (2 * a)}")
    else:
        print(
            f"La ecuación tiene dos soluciones: {(-b - d ** 0.5) / (2 * a)} y {(-b + d ** 0.5) / (2 * a)}"
        )


if __name__ == "__main__":
    main()

También se podrían utilizar condiciones anidadas:

def main():
    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 c: "))

    if a == b == c == 0:
        print("Todos los números son solución.")
    elif a == b == 0:
        print("La ecuación no tiene solución.")
    elif a == 0:
        print(f"La ecuación tiene una solución: {- c / b}")
    else:
        d = b * b - 4 * a * c
        if d < 0:
            print("La ecuación no tiene solución real.")
        elif d == 0:
            print(f"La ecuación tiene una solución: {- b / (2 * a)}")
        else:
            print(
                f"La ecuación tiene dos soluciones: {(-b - d ** 0.5) / (2 * a)} y {(-b + d ** 0.5) / (2 * a)}"
            )


if __name__ == "__main__":
    main()

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

def main():
    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} tiene un área de {base * altura / 2}"
        )
    elif respuesta == "C" or respuesta == "c":
        r = float(input("Escriba el radio: "))
        print(f"Un círculo de radio {r} tiene un área de {3.141592 * r * r}")


if __name__ == "__main__":
    main()

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")