Volver al índiceSoluciones de los ejercicios - if... elif... else...

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


if ... elif ... else ... 01

Si el programa no tiene en cuenta que no se puede dividir por cero, se pueden escribir sentencias condicionales independientes:

# -*- coding: cp1252 -*-
print "Divisor de números"
dividendo = int(raw_input("Escriba el dividendo: "))
divisor = int(raw_input("Escriba el divisor: "))
if dividendo % divisor == 0:
    print "La división es exacta. Cociente:", dividendo // divisor
if dividendo % divisor != 0:
    print "La división no es exacta. Cociente:", dividendo // divisor, \
          "Resto:", dividendo % divisor

Nota: la contrabarra de la penúltima línea es necesaria para no superar los 80 caracteres de largo de la línea

... o escribir sentencias condicionales encadenadas:

# -*- coding: cp1252 -*-
print "Divisor de números"
dividendo = int(raw_input("Escriba el dividendo: "))
divisor = int(raw_input("Escriba el divisor: "))
if dividendo % divisor == 0:
    print "La división es exacta. Cociente:", dividendo // divisor
else:
    print "La división no es exacta. Cociente:", dividendo // divisor, \
          "Resto:", dividendo % divisor

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

# -*- coding: cp1252 -*-
print "Divisor de números"
dividendo = int(raw_input("Escriba el dividendo: "))
divisor = int(raw_input("Escriba el divisor: "))
if dividendo % divisor:
    print "La división no es exacta. Cociente:", dividendo // divisor, \
        "Resto:", dividendo % divisor
else:
    print "La división es exacta. Cociente:", dividendo // divisor

Pero 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:

# -*- coding: cp1252 -*-
print "Divisor de números"
dividendo = int(raw_input("Escriba el dividendo: "))
divisor = int(raw_input("Escriba el divisor: "))

if divisor == 0:
    print "No se puede dividir por 0"
else:
    if dividendo % divisor == 0:
        print "La división es exacta. Cociente:", dividendo // divisor
    else:
        print "La división no es exacta. Cociente:", dividendo // divisor, \
              "Resto:", dividendo % divisor

... o sentencias condicionales encadenadas:

# -*- coding: cp1252 -*-
print "Divisor de números"
dividendo = int(raw_input("Escriba el dividendo: "))
divisor = int(raw_input("Escriba el divisor: "

if divisor == 0:
    print "No se puede dividir por 0"
elif dividendo % divisor == 0:
    print "La división es exacta. Cociente:", dividendo // divisor
else:
    print "La división no es exacta. Cociente:", dividendo // divisor, \
          "Resto:", dividendo % divisor


if ... elif ... else ... 02

El siguiente programa utiliza sentencias condicionales independientes (el orden no es importante):

# -*- coding: cp1252 -*-
print "Comparador de números"
numero1 = int(raw_input("Escriba un número: "))
numero2 = int(raw_input("Escriba otro número: "))

if numero1 > numero2:
    print "Menor:", numero2, "Mayor:", numero1
if numero1 < numero2:
    print "Menor:", numero1, "Mayor:", numero2
if numero1 == numero2:
    print "Los dos números son iguales"

El siguiente programa utiliza sentencias condicionales encadenadas (el orden no es importante):

# -*- coding: cp1252 -*-
print "Comparador de números"
numero1 = int(raw_input("Escriba un número: "))
numero2 = int(raw_input("Escriba otro número: "))

if numero1 > numero2:
    print "Menor:", numero2, "Mayor:", numero1
elif numero1 < numero2:
    print "Menor:", numero1, "Mayor:", numero2
else:
    print "Los dos números son iguales"

if ... elif ... else ... 03

El siguiente programa utiliza sentencias condicionales independientes (el orden no es importante):

# -*- coding: cp1252 -*-
print "Comparador de años"
fecha1 = int(raw_input("¿En qué año estamos?: "))
fecha2 = int(raw_input("Escriba un año cualquiera: "))

if fecha1 > fecha2:
    print "Desde el año", fecha2, "han pasado", fecha1 - fecha2, "años"
if fecha1 < fecha2:
    print "Para llegar al año", fecha2, "faltan", fecha2 - fecha1, "años"
if fecha1 == fecha2:
    print "¡Son el mismo año!"

El siguiente programa utiliza sentencias condicionales encadenadas (el orden no es importante):

# -*- coding: cp1252 -*-
print "Comparador de años"
fecha1 = int(raw_input("¿En qué año estamos?: "))
fecha2 = int(raw_input("Escriba un año cualquiera: "))

if fecha1 > fecha2:
    print "Desde el año", fecha2, "han pasado", fecha1 - fecha2, "años"
elif fecha1 < fecha2:
    print "Para llegar al año", fecha2, "faltan", fecha2 - fecha1, "años"
else:
    print "¡Son el mismo año!"


if ... elif ... else ... 04

El siguiente programa utiliza varias sentencias condicionales independientes, puesto que cada caso es distinto y no se pueden cumplir dos condiciones a la vez:

# -*- coding: cp1252 -*-
print "Comparador de múltiplos"
numero1 = int(raw_input("Escriba un número: "))
numero2 = int(raw_input("Escriba  otro número: "))

if numero1 >= numero2 and numero1 % numero2:
    print numero1, "no es múltiplo de", numero2
if numero1 >= numero2 and numero1 % numero2 == 0:
    print numero1, "es múltiplo de", numero2
if numero1 < numero2 and numero2 % numero1:
    print numero2, "no es múltiplo de", numero1
if numero1 < numero2 and numero2 % numero1 == 0:
    print numero2, "es múltiplo de", numero1

El siguiente programa encadena las condiciones, ahorrándonos la última condición:

# -*- coding: cp1252 -*-
print "Comparador de múltiplos"
numero1 = int(raw_input("Escriba un número: "))
numero2 = int(raw_input("Escriba otro número: "))

if numero1 >= numero2 and numero1 % numero2:
    print numero1, "no es múltiplo de", numero2
elif numero1 >= numero2 and numero1 % numero2 == 0:
    print numero1, "es múltiplo de", numero2
elif numero1 < numero2 and numero2 % numero1:
    print numero2, "no es múltiplo de", numero1
else:
    print numero2, "es múltiplo de", numero1

El siguiente programa utiliza sentencias condicionales anidadas:

# -*- coding: cp1252 -*-
print "Comparador de múltiplos"
numero1 = int(raw_input("Escriba un número: "))
numero2 = int(raw_input("Escriba otro número: "))

if numero1 >= numero2:
    if numero1 % numero2:
        print numero1, "no es múltiplo de", numero2
    else:
        print numero1, "es múltiplo de", numero2
else:
    if numero2 % numero1:
        print numero2, "no es múltiplo de", numero1
    else:
        print numero2, "es múltiplo de", numero1

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

# -*- coding: cp1252 -*-
print "Comparador de múltiplos"
numero1 = int(raw_input("Escriba un número: "))
numero2 = int(raw_input("Escriba otro número: "))
                                                                                                                         
if numero1 >= numero2:
    mayor = numero1
    menor = numero2
else:
    mayor = numero2
    menor = numero1

if mayor % menor:
    print mayor, "no es múltiplo de", menor
else:
    print mayor, "es múltiplo de", menor

if ... elif ... else ... 05

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.

# -*- coding: cp1252 -*-
print "Comparador de múltiplos"
numero1 = int(raw_input("Escriba un número: "))
numero2 = int(raw_input("Escriba otro número: "))

print "Comparador de tres números"
numero1 = int(raw_input("Escriba un número: "))
numero2 = int(raw_input("Escriba otro número: "))
numero3 = int(raw_input("Escriba otro número más: "))

if (numero1 == numero2 != numero3 or numero1 == numero3 != numero2 or
    numero2 == numero3 != numero1):
    print "Ha escrito uno de los números dos veces."
elif numero1 == numero2 == numero3:
    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

# -*- coding: cp1252 -*-
print "Comparador de tres números"
numero1 = int(raw_input("Escriba un número: "))
numero2 = int(raw_input("Escriba  otro número: "))
numero3 = int(raw_input("Escriba  otro número más: "))

if numero1 != numero2 and numero1 != numero3 and numero2 != numero3:
    print "Los tres números que ha escrito son distintos."
elif numero1 == numero2 == numero3:
    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).

# -*- coding: cp1252 -*-
print "Comparador de tres números"
numero1 = int(raw_input("Escriba un número: "))
numero2 = int(raw_input("Escriba  otro número: "))
numero3 = int(raw_input("Escriba  otro número más: "))

if numero1 == numero2 == numero3:
    print "Ha escrito tres veces el mismo número."
elif numero1 == numero2 or numero1 == numero3 or numero2 == numero3:
    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 las condiciones ya que el programa fallaría al escribir tres valores iguales.


if ... elif ... else ... 06

El siguiente programa utiliza sentencias condicionales independientes, por lo que el orden en que se escriban las sentencias condicionales no es importante:

# -*- coding: cp1252 -*-
print "Comprobador de años bisiestos"
fecha = int(raw_input("Escriba un año y le diré si es bisiesto: "))

if fecha %4 != 0:
    print "El año", fecha, "no es un año bisiesto."
if fecha % 100 == 0 and fecha % 400 != 0:
    print "El año", fecha, "no es un año bisiesto porque es múltiplo de 100", \
          "sin ser múltiplo de 400."
if fecha % 4 == 0 and fecha % 100 != 0:
    print "El año", fecha, "es un año bisiesto porque es múltiplo de 4."
if fecha % 400 == 0:
    print "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 escriben sentencias condicionales encadenadas y se empieza por el caso más especial.

Al haber comprobado 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.

# -*- coding: cp1252 -*-
print "Comprobador de años bisiestos"
fecha = int(raw_input("Escriba un año y le diré si es bisiesto: "))

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

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


if ... elif ... else ... 07

El siguiente programa utiliza sentencias condicionales independientes:

# -*- coding: cp1252 -*-
print "Ecuación a x + b = 0"
a = float(raw_input("Escriba el valor del coeficiente a: "))
b = float(raw_input("Escriba el valor del coeficiente b: "))

if a != 0:
    print "Una solución:", - b / a
if a == 0 and b == 0:
    print "Todos los números son solución"
if a == 0 and b != 0:
    print "Sin solución"

El siguiente programa utiliza sentencias condicionales encadenadas para simplificar las condiciones. 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 (coeficientes no nulos).

# -*- coding: cp1252 -*-
print "Ecuación a x + b = 0"
a = float(raw_input("Escriba el valor del coeficiente a: "))
b = float(raw_input("Escriba el valor del coeficiente b: "))

if a == b == 0:
    print "Todos los números son solución"
elif a == 0:
    print "Sin solución"
else:
    print "Una solución:", - b / a

if ... elif ... else ... 08

El siguiente programa utiliza sentencias condicionales independientes, por lo que el orden de las sentencias condicionales podría ser cualquiera:

# -*- coding: cp1252 -*-
print "Ecuación a x² + b x + c = 0"
a = float(raw_input("Escriba el valor del coeficiente a: "))
b = float(raw_input("Escriba el valor del coeficiente b: "))
c = float(raw_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"
if a == b == 0 and c != 0:
    print "Sin solución"
if a == 0 and b != 0 and c != 0:
    print "Una solución:", - c / b
if a !=0 and d < 0:
    print "Sin solución real"
if a !=0 and d == 0:
    print "Una solución:", - b / (2 * a)
if a !=0 and d > 0:
    print "Dos soluciones:", (- b - d ** 0.5) / (2 * a), "y", \
          (- b + d ** 0.5) / (2 * a)

El siguiente programa utiliza sentencias condicionales encadenadas para simplificar las condiciones. 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). Las tres últimas pueden estar en cualquier orden, pero siempre detrás de las tres primeras.

# -*- coding: cp1252 -*-
print "Ecuación a x² + b x + c = 0"
a = float(raw_input("Escriba el valor del coeficiente a: "))
b = float(raw_input("Escriba el valor del coeficiente b: "))
c = float(raw_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 "Una solución:", - c / b
elif d < 0:
    print "Sin solución real"
elif d == 0:
    print "Una solución:", - b / (2 * a)
else:
    print "Dos soluciones:", (- b - d ** 0.5) / (2 * a), "y", \
          (- b + d ** 0.5) / (2 * a)

if ... elif ... else ... 09

# -*- coding: cp1252 -*-
print "Cálculo de áreas - Elige una figura geométrica:"
print "a) Triángulo"
print "b) Círculo"
respuesta = raw_input("¿Qué figura quiere calcular (Escriba T o C)? ")

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

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

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

# -*- coding: cp1252 -*-
print "Convertidor de centímetros a kilómetros, metros y centímetros"
centimetros = int(raw_input("Escriba una distancia en centímetros: "))

kilometros = centimetros // 100000
metros = centimetros % 100000 // 100
resto = centimetros % 100
print centimetros, "cm son", kilometros, "km", metros, "m", resto, "cm"

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

# -*- coding: cp1252 -*-
print "Convertidor de centímetros a kilómetros, metros y centímetros"
centimetros = int(raw_input("Escriba una distancia en centímetros: "))

kilometros = centimetros // 100000
metros = centimetros % 100000 // 100
resto = centimetros % 100
print centimetros, "cm son",
if kilometros:
    print kilometros, "km",
if metros:
    print metros, "m", 
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:

# -*- coding: cp1252 -*-
print "Convertidor de centímetros a kilómetros, metros y centímetros"
centimetros = int(raw_input("Escriba una distancia en centímetros: "))

kilometros = centimetros // 100000
metros = centimetros % 100000 // 100
resto = centimetros % 100
print centimetros, "cm son"
if kilometros:
    if metros or resto:
        print kilometros, "km,",
    else:
        print kilometros, "km",
if metros:
    if resto:
        print metros, "m,",
    else:
        print 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):

# -*- coding: cp1252 -*-
print "Convertidor de centímetros a kilómetros, metros y centímetros"
centimetros = int(raw_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 centimetros, "cm son",
    if kilometros:
        if (metros and resto == 0) or (metros == 0 and resto):
            print kilometros, "km y",
        elif metros or resto:
            print kilometros, "km,",
        else:
            print kilometros, "km",
    if metros:
        if resto:
            print metros, "m y",
        else:
            print metros, "m", 
    if centimetros == 0 or resto:
        print resto, "cm"
Esta página forma parte del curso "Introducción a la programación con Python" disponible en http://www.mclibre.org
Autor: Bartolomé Sintes Marco
Última modificación de esta página: 14 de mayo de 2012

Creative Commons License
Esta obra está bajo una licencia de Creative Commons.