Ejercicios condicionales
Ejercicios de Condicionales en Python
Ejercicio 1 — Mayor o menor de edad
Nivel: ⭐ Muy fácil
Enunciado
Pide al usuario su edad y muestra un mensaje indicando si es mayor o menor de edad. Si tiene exactamente 18 años muestra un mensaje especial indicando que acaba de alcanzar la mayoría de edad.
La salida debe verse así para cada caso:
# Si tiene 25 años:
Tienes 25 años. Eres mayor de edad.
# Si tiene 15 años:
Tienes 15 años. Eres menor de edad.
# Si tiene exactamente 18:
Tienes 18 años. ¡Acabas de alcanzar la mayoría de edad!
Pistas
- Necesitas tres casos: exactamente 18, mayor de 18 y menor de 18. Piensa en qué orden debes comprobarlos. Si primero compruebas >= 18 el caso exacto de 18 quedará absorbido por esa condición y nunca llegarás a él.
- Usa if, elif y else en ese orden.
- La edad es un número entero, conviértela con int().
Ejercicio 2 — Clasificador de temperatura
Nivel: ⭐ Muy fácil
Enunciado
Pide al usuario la temperatura en grados Celsius y clasifícala según esta tabla:
- Menos de 0°: Bajo cero, riesgo de hielo
- Entre 0 y 10°: Muy frío, abrígate bien
- Entre 11 y 20°: Fresco, lleva una chaqueta
- Entre 21 y 30°: Agradable, temperatura ideal
- Más de 30°: Calor, mantente hidratado
La salida debe verse así:
Temperatura: 23°C
Clasificación: Agradable, temperatura ideal
Pistas
- La temperatura puede tener decimales, usa float() al recogerla.
- Usa if / elif / elif / elif / else para cubrir los cinco rangos.
- Puedes encadenar comparaciones en Python de forma muy legible: 0 <= temperatura <= 10 en lugar de temperatura >= 0 and temperatura <= 10.
Ejercicio 3 — Calculadora básica con selección de operación
Nivel: ⭐⭐ Fácil
Enunciado
Pide al usuario dos números y la operación que quiere realizar (suma, resta, multiplicación o división). Muestra el resultado. Si el usuario elige división y el segundo número es cero, muestra un mensaje de error en lugar del resultado. Si el usuario escribe una operación que no existe, indícaselo.
La salida debe verse así:
Número 1: 10
Número 2: 3
Operación (+, -, *, /): /
10.0 / 3.0 = 3.33
Pistas
- Recoge la operación con input(), no hace falta convertirla porque es texto.
- Usa if / elif / elif / elif / else para cada operación posible y el caso de operación desconocida.
- Dentro del elif de la división añade un if anidado para comprobar si el segundo número es cero antes de dividir.
- El resultado de la división muéstralo con dos decimales usando :.2f.
Ejercicio 4 — Clasificador de notas con mensaje personalizado
Nivel: ⭐⭐ Fácil
Enunciado
Pide el nombre del alumno y su nota numérica. Clasifica la nota y muestra un mensaje personalizado con el nombre para cada caso. Además indica si el alumno necesita ir a recuperación (nota menor de 5) o si puede matricularse directamente el curso siguiente (nota igual o mayor de 5).
La salida debe verse así:
# Para una nota de 8.5:
Alumno: Carlos López
Nota: 8.5 → Notable
¡Muy bien, Carlos! Puedes matricularte en el curso siguiente.
# Para una nota de 3.2:
Alumno: Carlos López
Nota: 3.2 → Suspenso
Lo sentimos, Carlos. Deberás ir a recuperación.
Pistas
- Necesitas dos estructuras condicionales separadas: una para la calificación (Suspenso, Aprobado, Notable, Sobresaliente) y otra para el mensaje de recuperación o matrícula. No intentes meterlo todo en un solo if.
- Para el nombre personalizado en el mensaje guarda el nombre en una variable y úsalo dentro de la f-string.
- La nota puede tener decimales.
Ejercicio 5 — Verificador de contraseña
Nivel: ⭐⭐ Fácil
Enunciado
Pide al usuario que introduzca una contraseña y comprueba si cumple estos requisitos de seguridad:
- Tiene al menos 8 caracteres
- Contiene al menos un número (pista: comprueba si algún carácter del 0 al 9 está en la contraseña)
Muestra si la contraseña es segura o no, y si no lo es indica exactamente qué requisitos no cumple.
La salida debe verse así:
# Contraseña segura:
Contraseña: Python2024
✓ Longitud correcta (10 caracteres)
✓ Contiene números
La contraseña es SEGURA
# Contraseña insegura:
Contraseña: python
✗ Demasiado corta (6 caracteres, mínimo 8)
✗ No contiene números
La contraseña es INSEGURA
Pistas
- Para saber la longitud de un string usa len(contraseña).
- Para comprobar si la contraseña contiene algún número puedes usar el operador in con cada dígito, o de forma más elegante: any(c in contraseña for c in «0123456789»). Si aún no has visto esta sintaxis, puedes hacerlo con «0» in contraseña or «1» in contraseña or … aunque es más largo.
- Usa variables booleanas para guardar el resultado de cada comprobación: longitud_ok = len(contraseña) >= 8.
- Al final comprueba ambas variables con and para determinar si la contraseña es segura.
Ejercicio 6 — Calculadora de descuentos en una tienda
Nivel: ⭐⭐⭐ Intermedio
Enunciado
Una tienda aplica descuentos según el importe total de la compra y si el cliente tiene tarjeta de fidelidad. Las reglas son:
- Sin tarjeta: sin descuento si la compra es menor de 50€, 5% si está entre 50€ y 99.99€, 10% si es 100€ o más.
- Con tarjeta: 5% adicional sobre el descuento anterior en todos los casos (es decir, 5%, 10% o 15%).
Pide el importe y si tiene tarjeta (s/n) y muestra el desglose completo.
La salida debe verse así:
Importe de la compra: 120.00 €
¿Tienes tarjeta de fidelidad? (s/n): s
Importe original: 120.00 €
Descuento aplicado: 15 % (tarjeta incluida)
Ahorro: 18.00 €
Total a pagar: 102.00 €
Pistas
- Recoge la respuesta de la tarjeta como texto y conviértela a booleano: tiene_tarjeta = respuesta.lower() == «s». El método .lower() convierte el texto a minúsculas para que funcione tanto si el usuario escribe «S» como «s».
- Calcula primero el descuento base según el importe usando if / elif / else. Guárdalo en una variable descuento.
- Luego, con un if separado, añade el 5% adicional si tiene tarjeta.
- El importe final es importe * (1 – descuento / 100).
Ejercicio 7 — Sistema de clasificación en una competición
Nivel: ⭐⭐⭐ Intermedio
Enunciado
En una competición de programación los equipos se clasifican según su puntuación y el número de penalizaciones. Pide el nombre del equipo, su puntuación (0-100) y el número de penalizaciones. Aplica estas reglas:
- Cada penalización resta 2 puntos a la puntuación final.
- La puntuación final no puede ser negativa (mínimo 0).
- Clasificación: 90 o más → Oro, entre 75 y 89 → Plata, entre 60 y 74 → Bronce, menos de 60 → Sin clasificación.
- Si el equipo tiene más de 5 penalizaciones queda automáticamente descalificado independientemente de la puntuación.
La salida debe verse así:
Equipo: Los Pythonistas
Puntuación base: 88
Penalizaciones: 3
Puntos restados: 6
Puntuación final: 82
Clasificación: 🥈 Plata
Pistas
- Primero comprueba la descalificación por penalizaciones. Si está descalificado muestra el mensaje y no calcules nada más.
- Para calcular la puntuación final resta las penalizaciones: puntuacion_final = puntuacion – (penalizaciones * 2). Luego usa max(0, puntuacion_final) para asegurarte de que no sea negativa. max() devuelve el mayor de dos valores.
- Usa condiciones combinadas con and para los rangos de puntuación si lo necesitas, aunque con elif encadenado y los rangos bien pensados no hará falta.
Ejercicio 8 — Simulador de semáforo peatonal inteligente
Nivel: ⭐⭐⭐ Intermedio
Enunciado
Un semáforo peatonal inteligente decide si un peatón puede cruzar según varias condiciones. Pide al usuario: el color del semáforo (rojo/verde), si hay coches pasando (s/n), si es de noche (s/n) y si el peatón tiene movilidad reducida (s/n). Aplica estas reglas:
- Si el semáforo está en verde y no hay coches: puede cruzar.
- Si el semáforo está en verde pero hay coches: advertencia, cruzar con precaución.
- Si el semáforo está en rojo pero no hay coches y es de noche: puede cruzar con precaución (semáforo en modo nocturno).
- Si el semáforo está en rojo y hay coches: no puede cruzar.
- En cualquier caso, si el peatón tiene movilidad reducida añade el mensaje: «Tiempo de cruce extendido activado».
La salida debe verse así:
Color del semáforo: verde
¿Hay coches pasando? (s/n): n
¿Es de noche? (s/n): n
¿Movilidad reducida? (s/n): s
✓ PUEDE CRUZAR
⏱ Tiempo de cruce extendido activado
Pistas
- Convierte todas las respuestas s/n a booleanos al inicio del programa para que el código sea más limpio: hay_coches = input(…).lower() == «s».
- Usa condiciones combinadas con and y or para cada caso. Por ejemplo el caso nocturno: semaforo == «rojo» and not hay_coches and es_noche.
- El mensaje de movilidad reducida es independiente del resultado principal. Usa un if separado al final para él.
- Piensa bien el orden de los elif: si el semáforo es verde con coches y también es de noche, ¿qué regla tiene prioridad?
Ejercicio 9 — Calculadora de precio de envío
Nivel: ⭐⭐⭐⭐ Difícil
Enunciado
Una empresa de mensajería calcula el precio del envío según el peso del paquete, la distancia y si es urgente. Pide todos los datos y calcula el precio final aplicando todas las reglas.
Tarifa base por peso:
- Hasta 1 kg: 3.50 €
- De 1 a 5 kg: 3.50 € + 1.20 € por cada kg adicional sobre 1
- De 5 a 20 kg: tarifa de 1 a 5 kg + 0.80 € por cada kg sobre 5
- Más de 20 kg: no se acepta el envío
Suplemento por distancia:
- Hasta 100 km: sin suplemento
- De 100 a 500 km: +2.00 €
- Más de 500 km: +5.00 €
Urgente: recargo del 50% sobre el precio total.
Envíos gratuitos si el precio final (antes del recargo urgente) supera 50 €.
La salida debe verse así:
===== PRESUPUESTO DE ENVÍO =====
Peso: 3.5 kg
Distancia: 250 km
Urgente: Sí
Tarifa base: 5.50 € (1 kg base + 2.5 kg adicionales)
Suplemento km: 2.00 €
Subtotal: 7.50 €
Recargo urgente: 3.75 €
PRECIO FINAL: 11.25 €
================================
Pistas
- Divide el problema en partes y resuélvelas una a una: primero el cálculo de la tarifa por peso, luego el suplemento por distancia y finalmente los recargos.
- Para el peso, calcula los kilogramos en cada tramo: si el paquete pesa 3.5 kg, tiene 1 kg en el primer tramo y 2.5 kg en el segundo. Usa variables intermedias: kg_tramo2 = peso – 1.
- Comprueba primero si el paquete supera 20 kg y si es así muestra el error y no calcules nada más. Puedes usar una variable booleana acepta_envio = peso <= 20.
- Aplica el recargo urgente solo después de sumar tarifa base y suplemento.
- Comprueba si el precio antes del urgente supera 50 € para el envío gratuito, y en ese caso el recargo urgente también desaparece.
Ejercicio 10 — Sistema de admisión universitaria
Nivel: ⭐⭐⭐⭐⭐ Muy difícil
Enunciado
Simula el sistema de admisión de una universidad que evalúa candidatos según múltiples criterios. Pide todos los datos al usuario y determina si es admitido, admitido con condiciones o rechazado, además de calcular su puntuación de admisión final.
Datos a pedir:
- Nota media del bachillerato (0-10)
- Nota de la prueba de acceso (0-10)
- Nota de la prueba específica de la carrera (0-10)
- Si tiene certificado de idioma B2 o superior (s/n)
- Si ha realizado actividades extracurriculares relevantes (s/n)
- Número de años de experiencia laboral relacionada (0 en adelante)
Cálculo de la puntuación de admisión (máximo 14 puntos):
- Nota media bachillerato: cuenta un 40% (máximo 4 puntos)
- Nota prueba de acceso: cuenta un 60% (máximo 6 puntos)
- Nota prueba específica: máximo 4 puntos adicionales si es >= 5, 0 si es menor de 5
- Certificado de idioma B2: +0.5 puntos
- Actividades extracurriculares: +0.3 puntos
- Experiencia laboral: +0.2 puntos por año, máximo 1 punto en total
Criterios de admisión:
- Admitido: puntuación >= 9 Y nota de acceso >= 5 Y nota de bachillerato >= 5
- Admitido con condiciones: puntuación >= 7 Y (nota de acceso >= 4 O nota bachillerato >= 6)
- Rechazado: cualquier otro caso
Casos especiales:
- Si la nota de acceso es menor de 4, rechazo directo independientemente del resto.
- Si la nota de bachillerato es menor de 3, rechazo directo independientemente del resto.
La salida debe verse así:
========= RESULTADO DE ADMISIÓN =========
Candidato evaluado el 2024-01-15
Datos aportados:
Nota bachillerato: 7.5
Nota prueba acceso: 6.8
Nota prueba específica: 8.0
Certificado idioma: Sí
Actividades extra: No
Experiencia laboral: 2 años
Desglose de puntuación:
Bachillerato (40%): 3.00 pts
Prueba acceso (60%): 4.08 pts
Prueba específica: 3.20 pts
Certificado idioma: 0.50 pts
Actividades extra: 0.00 pts
Experiencia laboral: 0.40 pts
─────────────────────────────
PUNTUACIÓN TOTAL: 11.18 / 14
RESULTADO: ✓ ADMITIDO
=========================================
Pistas
- Divide el programa en tres bloques bien separados: recogida de datos, cálculo de puntuación y evaluación de criterios.
- Comprueba primero los casos de rechazo directo (acceso < 4 o bachillerato < 3) antes de calcular nada. Si se cumple alguno, muestra el rechazo y termina. Puedes usar una variable rechazo_directo = False y cambiarla a True si se cumple algún caso especial.
- Para la puntuación específica: pts_especifica = (nota_especifica / 10) * 4 if nota_especifica >= 5 else 0.
- Para la experiencia laboral: calcula pts_experiencia = experiencia * 0.2 y luego limita el resultado a 1 usando min(pts_experiencia, 1.0). La función min() devuelve el menor de dos valores.
- Evalúa los criterios de admisión en orden: primero comprueba si cumple para Admitido, luego para Admitido con condiciones y si no cumple ninguno es Rechazado. Usa condiciones combinadas con and y or con paréntesis para que quede claro el orden de evaluación.
- Para la fecha puedes usar from datetime import date y date.today() si quieres que sea dinámica, o simplemente pedir la fecha al usuario o ponerla fija como string.