Cómo practicar con estos ejercicios de condicionales
Necesitas conocer las comparaciones, los operadores lógicos y la sintaxis de if, elif y else.
- Lee el contrato: qué recibe la función y qué debe devolver.
- Escribe la función y añade debajo las comprobaciones.
- Ejecuta ambas partes. Un
assertque pasa no imprime nada; si falla, apareceAssertionError. - Antes de abrir la solución, prueba la frontera de cada regla: un valor justo antes, el valor del límite y otro justo después.
Cada solución usa return. Mostrar un valor con print no sustituye al resultado que espera recibir quien llama a la función.
Todas las soluciones incluyen sus pruebas y puedes abrirlas en el editor con el botón «Probar en el editor». Las comprobaciones son educativas y no sustituyen toda la validación de una aplicación real.
Una condición
Decide si una persona es mayor de edad
Escribe es_mayor_de_edad(edad). Recibe un entero y devuelve True si tiene 18 años o más y False en caso contrario. Los 18 años cuentan como mayor de edad.
assert es_mayor_de_edad(17) is False
assert es_mayor_de_edad(18) is True
assert es_mayor_de_edad(19) is TrueVer una pista para el ejercicio 1
Una comparación ya produce True o False. Piensa si el límite de 18 debe estar incluido.
Ver solución y explicación del ejercicio 1
def es_mayor_de_edad(edad):
return edad >= 18
assert es_mayor_de_edad(17) is False
assert es_mayor_de_edad(18) is True
assert es_mayor_de_edad(19) is True
print("Pruebas superadas")El caso 18 es la frontera: con > fallaría. No hace falta un if que devuelva True o False, porque la comparación ya es un booleano.
Clasifica el signo de un número
Escribe signo(numero). Recibe un número y devuelve "positivo", "negativo" o "cero".
assert signo(5) == "positivo"
assert signo(-3) == "negativo"
assert signo(0) == "cero"
assert signo(0.5) == "positivo"Ver una pista para el ejercicio 2
Necesitas tres caminos distintos. Empieza por el caso más específico.
Ver solución y explicación del ejercicio 2
def signo(numero):
if numero > 0:
return "positivo"
if numero < 0:
return "negativo"
return "cero"
assert signo(5) == "positivo"
assert signo(-3) == "negativo"
assert signo(0) == "cero"
assert signo(0.5) == "positivo"
print("Pruebas superadas")Cada rama termina con return, así que no hace falta else. El cero es el único caso que no cumple ninguna de las dos primeras condiciones.
Varias ramas
Convierte una nota en una categoría
Escribe categoria_nota(nota). Devuelve "Sobresaliente" desde 9, "Notable" desde 7, "Aprobado" desde 5 y "Suspenso" por debajo de 5. Los límites pertenecen a la categoría superior.
assert categoria_nota(10) == "Sobresaliente"
assert categoria_nota(9) == "Sobresaliente"
assert categoria_nota(8.9) == "Notable"
assert categoria_nota(7) == "Notable"
assert categoria_nota(5) == "Aprobado"
assert categoria_nota(4.99) == "Suspenso"Ver una pista para el ejercicio 3
Una cadena if/elif ejecuta la primera rama verdadera: empieza por el límite más alto.
Ver solución y explicación del ejercicio 3
def categoria_nota(nota):
if nota >= 9:
return "Sobresaliente"
elif nota >= 7:
return "Notable"
elif nota >= 5:
return "Aprobado"
return "Suspenso"
assert categoria_nota(10) == "Sobresaliente"
assert categoria_nota(9) == "Sobresaliente"
assert categoria_nota(8.9) == "Notable"
assert categoria_nota(7) == "Notable"
assert categoria_nota(5) == "Aprobado"
assert categoria_nota(4.99) == "Suspenso"
print("Pruebas superadas")El orden de las condiciones decide el resultado: una nota de 9 cumple también >= 7 y >= 5, pero la primera rama verdadera gana. Las pruebas rodean cada frontera.
Elige el mensaje según la hora
Escribe saludo(hora). Recibe un entero entre 0 y 23. Devuelve "Buenos días" de 6 a 11, "Buenas tardes" de 12 a 20 y "Buenas noches" en el resto de horas.
assert saludo(6) == "Buenos días"
assert saludo(11) == "Buenos días"
assert saludo(12) == "Buenas tardes"
assert saludo(20) == "Buenas tardes"
assert saludo(21) == "Buenas noches"
assert saludo(0) == "Buenas noches"
assert saludo(5) == "Buenas noches"Ver una pista para el ejercicio 4
Con dos intervalos definidos, el resto de horas puede quedar en el else.
Ver solución y explicación del ejercicio 4
def saludo(hora):
if 6 <= hora <= 11:
return "Buenos días"
if 12 <= hora <= 20:
return "Buenas tardes"
return "Buenas noches"
assert saludo(6) == "Buenos días"
assert saludo(11) == "Buenos días"
assert saludo(12) == "Buenas tardes"
assert saludo(20) == "Buenas tardes"
assert saludo(21) == "Buenas noches"
assert saludo(0) == "Buenas noches"
assert saludo(5) == "Buenas noches"
print("Pruebas superadas")Python permite encadenar comparaciones como 6 <= hora <= 11. La noche cruza la medianoche, por eso es más simple dejarla como caso restante.
Reglas compuestas
Calcula el precio de una entrada
Escribe precio_entrada(edad, es_estudiante). Menores de 5 años: 0. Desde 65 años: 5. Si es estudiante o tiene menos de 18 años: 6. En cualquier otro caso: 10. Aplica las reglas en este orden.
assert precio_entrada(4, False) == 0
assert precio_entrada(5, False) == 6
assert precio_entrada(17, False) == 6
assert precio_entrada(30, True) == 6
assert precio_entrada(30, False) == 10
assert precio_entrada(65, False) == 5
assert precio_entrada(70, True) == 5Ver una pista para el ejercicio 5
El orden importa: un estudiante de 70 años paga 5, no 6. Ordena las reglas de más a menos prioritaria.
Ver solución y explicación del ejercicio 5
def precio_entrada(edad, es_estudiante):
if edad < 5:
return 0
if edad >= 65:
return 5
if es_estudiante or edad < 18:
return 6
return 10
assert precio_entrada(4, False) == 0
assert precio_entrada(5, False) == 6
assert precio_entrada(17, False) == 6
assert precio_entrada(30, True) == 6
assert precio_entrada(30, False) == 10
assert precio_entrada(65, False) == 5
assert precio_entrada(70, True) == 5
print("Pruebas superadas")Cada return protege las reglas siguientes: quien llega a la tercera condición ya sabe que tiene entre 5 y 64 años. El caso de 70 años con carnet de estudiante comprueba el orden.
Reconoce un año bisiesto
Escribe es_bisiesto(anio). Un año es bisiesto si es divisible entre 4, salvo que lo sea entre 100, y entonces solo si lo es también entre 400.
assert es_bisiesto(2024) is True
assert es_bisiesto(2023) is False
assert es_bisiesto(1900) is False
assert es_bisiesto(2000) is True
assert es_bisiesto(2100) is FalseVer una pista para el ejercicio 6
Traduce la regla a una sola expresión con and, or y paréntesis, o a ramas ordenadas.
Ver solución y explicación del ejercicio 6
def es_bisiesto(anio):
return (anio % 4 == 0 and anio % 100 != 0) or anio % 400 == 0
assert es_bisiesto(2024) is True
assert es_bisiesto(2023) is False
assert es_bisiesto(1900) is False
assert es_bisiesto(2000) is True
assert es_bisiesto(2100) is False
print("Pruebas superadas")Los años de siglo (1900, 2000) son las excepciones que ponen a prueba la regla. Los paréntesis muestran que la excepción de los 100 años se aplica solo a la primera parte.
Errores frecuentes en estos ejercicios
- El límite cae en la rama equivocada
- Comprueba si la regla incluye el valor del límite y si usas
>=o>. Prueba siempre antes, en y después del límite. - Varias ramas verdaderas y gana la equivocada
- Una cadena
if/elifejecuta la primera rama verdadera. Ordena las condiciones de la más específica a la más general. - La función devuelve None
- Puede que ninguna rama se ejecute y no haya un
returnfinal. Añade una respuesta para el caso restante. - IndentationError
- Las instrucciones de cada rama deben ir con la misma sangría. Consulta IndentationError.
Si no entiendes el traceback, empieza por su última línea en la guía de errores de Python.
Preguntas frecuentes sobre ejercicios de condicionales
¿Es mejor usar if con return o con else?
Ambas formas son válidas. Con return en cada rama el else sobra, y el código suele leerse mejor porque cada condición descarta un caso.
¿Puedo devolver directamente la comparación?
Sí. return edad >= 18 ya devuelve True o False, y es más claro que un if que devuelva esos valores.
¿Cómo pruebo todas las ramas?
Elige al menos un valor por rama y los valores de cada frontera. Escribe los casos como assert antes de implementar la regla.
Repite las decisiones dentro de un bucle
Cuando domines las condiciones, combínalas con un recorrido para clasificar muchos datos.
Practicar bucles →Ver los 12 ejercicios de fundamentosFuentes y compatibilidad
Los ejemplos usan Python 3 y la biblioteca estándar. Las instrucciones de instalación se contrastaron con la documentación oficial; los ejemplos de código se verifican con las comprobaciones de estas guías.