🔀 MAD- UdelaR Ejercicios de Condicionales

Introduce la contraseña para acceder

❌ Contraseña incorrecta

← Volver al índice

MAD-UdelaR: Ejercicios de Condicionales en Python

Daniel Miles Touya

Realiza los Ejercicios en celdas sucesivas de Jupyter Notebook

La solución es una de las posibles (no hay una sola respuesta)

Conceptos Clave sobre Condicionales

Condicionales: Permiten que el programa tome decisiones basadas en condiciones.

Estructuras: if elif else match/case

Operadores: ==, !=, <, >, <=, >=, in, not in, is, is not

Lógicos: and, or, not

1
Condicional básico if
Fácil
Problema: Crea una variable edad = 18. Si la edad es mayor o igual a 18, imprime "Eres mayor de edad", sino imprime "Eres menor de edad".

✅ Solución:

edad = 18 if edad >= 18: print("Eres mayor de edad") else: print("Eres menor de edad")

Explicación: El if evalúa una condición. Si es verdadera ejecuta el bloque, sino ejecuta el else.

2
Múltiples condiciones con elif
Fácil
Problema: Crea una variable nota = 85. Clasifica la nota: 90-100 = "Excelente", 80-89 = "Bueno", 70-79 = "Regular", 60-69 = "Suficiente", menos de 60 = "Insuficiente".

✅ Solución:

nota = 85 if nota >= 90: print("Excelente") elif nota >= 80: print("Bueno") elif nota >= 70: print("Regular") elif nota >= 60: print("Suficiente") else: print("Insuficiente")

Explicación: elif permite evaluar múltiples condiciones en orden. Se ejecuta el primer bloque cuya condición sea verdadera.

3
Operadores lógicos
Fácil
Problema: Crea variables llueve = True y tengo_paraguas = False. Si llueve Y no tengo paraguas, imprime "Me voy a mojar". Si llueve Y tengo paraguas, imprime "Estoy preparado". Si no llueve, imprime "Buen día para salir".

✅ Solución:

llueve = True tengo_paraguas = False if llueve and not tengo_paraguas: print("Me voy a mojar") elif llueve and tengo_paraguas: print("Estoy preparado") else: print("Buen día para salir")

Explicación: Los operadores and, or, not combinan condiciones booleanas.

4
Inclusión en listas
Fácil
Problema: Crea una lista frutas = ["manzana", "plátano", "naranja"] y una variable fruta_elegida = "plátano". Verifica si la fruta elegida está en la lista e imprime un mensaje apropiado.

✅ Solución:

frutas = ["manzana", "plátano", "naranja"] fruta_elegida = "plátano" if fruta_elegida in frutas: print(f"¡Genial! {fruta_elegida} está disponible") else: print(f"Lo siento, {fruta_elegida} no está disponible")

Explicación: El operador in verifica si un elemento está presente en una lista, tupla o string.

5
Inclusión en diccionarios
Medio
Problema: Crea un diccionario precios = {"manzana": 1.50, "plátano": 0.80, "naranja": 1.20}. Pregunta por una fruta y muestra su precio si existe, o un mensaje de no disponible.

✅ Solución:

precios = {"manzana": 1.50, "plátano": 0.80, "naranja": 1.20} fruta = "manzana" # Simula input del usuario if fruta in precios: print(f"El precio de {fruta} es {precios[fruta]}€") else: print(f"No tenemos {fruta} disponible")

Explicación: in verifica si una clave existe en un diccionario antes de acceder a su valor.

6
Operador ternario
Medio
Problema: Crea una variable temperatura = 25. Usa el operador ternario para asignar "Calor" si es mayor a 20, o "Frío" si es menor o igual, y guárdalo en una variable sensacion.

✅ Solución:

temperatura = 25 sensacion = "Calor" if temperatura > 20 else "Frío" print(f"Con {temperatura}°C siento {sensacion}")

Explicación: El operador ternario valor_si_true if condicion else valor_si_false es una forma concisa de escribir if-else.

7
Validación de rangos
Fácil
Problema: Crea una variable numero = 45. Verifica si está en el rango de 1 a 100 (inclusivo) e imprime un mensaje apropiado.

✅ Solución:

numero = 45 if 1 <= numero <= 100: print(f"{numero} está en el rango válido (1-100)") else: print(f"{numero} está fuera del rango válido")

Explicación: Python permite comparaciones encadenadas como 1 <= numero <= 100.

8
Match/Case básico
Medio
Problema: Crea una variable dia = "lunes". Usa match/case para imprimir diferentes mensajes según el día de la semana.

✅ Solución:

dia = "lunes" match dia: case "lunes" | "martes" | "miércoles" | "jueves" | "viernes": print("Día laboral - A trabajar!") case "sábado": print("¡Sábado de descanso!") case "domingo": print("Domingo de relajación") case _: print("Día no válido")

Explicación: match/case (Python 3.10+) es como switch. El | permite múltiples valores y _ es el caso por defecto.

9
Validación de contraseña
Medio
Problema: Crea una variable password = "Python123". Valida que tenga al menos 8 caracteres, contenga al menos un número y al menos una letra mayúscula.

✅ Solución:

password = "Python123" tiene_longitud = len(password) >= 8 tiene_numero = any(char.isdigit() for char in password) tiene_mayuscula = any(char.isupper() for char in password) if tiene_longitud and tiene_numero and tiene_mayuscula: print("✅ Contraseña válida") else: print("❌ Contraseña inválida") if not tiene_longitud: print(" - Debe tener al menos 8 caracteres") if not tiene_numero: print(" - Debe contener al menos un número") if not tiene_mayuscula: print(" - Debe contener al menos una mayúscula")

Explicación: Combinamos múltiples condiciones y usamos métodos de string como isdigit() y isupper().

10
Calculadora simple con match
Medio
Problema: Crea variables a = 10, b = 5, operacion = "+". Usa match/case para realizar la operación correspondiente (+, -, *, /, %).

✅ Solución:

a = 10 b = 5 operacion = "+" match operacion: case "+": resultado = a + b case "-": resultado = a - b case "*": resultado = a * b case "/": if b != 0: resultado = a / b else: resultado = "Error: División por cero" case "%": if b != 0: resultado = a % b else: resultado = "Error: División por cero" case _: resultado = "Operación no válida" print(f"{a} {operacion} {b} = {resultado}")

Explicación: match/case es ideal para manejar diferentes opciones. Incluimos validación para evitar división por cero.

11
Verificación de tipos
Medio
Problema: Crea una variable dato = 42. Usa match/case con patterns para determinar el tipo de dato y mostrar un mensaje específico.

✅ Solución:

dato = 42 match dato: case int() if dato > 0: print(f"Es un entero positivo: {dato}") case int() if dato < 0: print(f"Es un entero negativo: {dato}") case int(): print(f"Es cero: {dato}") case str(): print(f"Es un string: '{dato}'") case float(): print(f"Es un decimal: {dato}") case bool(): print(f"Es un booleano: {dato}") case _: print(f"Tipo no reconocido: {type(dato)}")

Explicación: match/case puede usar patterns con tipos y guards (condiciones con if).

12
Sistema de descuentos
Medio
Problema: Crea variables precio = 100, es_estudiante = True, es_senior = False. Aplica descuentos: estudiantes 15%, seniors 20%, estudiantes seniors 25%. Calcula el precio final.

✅ Solución:

precio = 100 es_estudiante = True es_senior = False if es_estudiante and es_senior: descuento = 25 categoria = "estudiante senior" elif es_estudiante: descuento = 15 categoria = "estudiante" elif es_senior: descuento = 20 categoria = "senior" else: descuento = 0 categoria = "general" precio_final = precio * (1 - descuento / 100) print(f"Categoría: {categoria}") print(f"Precio original: {precio}€") print(f"Descuento: {descuento}%") print(f"Precio final: {precio_final:.2f}€")

Explicación: El orden de las condiciones importa. Verificamos primero la condición más específica.

13
Verificación de membresía
Fácil
Problema: Crea un conjunto usuarios_vip = {"ana", "juan", "maria"} y una variable usuario = "juan". Verifica si el usuario es VIP e imprime beneficios o mensaje de upgrade.

✅ Solución:

usuarios_vip = {"ana", "juan", "maria"} usuario = "juan" if usuario in usuarios_vip: print(f"¡Bienvenido {usuario}! Eres usuario VIP") print("Beneficios: envío gratis, descuentos exclusivos, soporte prioritario") else: print(f"Hola {usuario}, considera upgradearte a VIP") print("¡Obtén envío gratis y descuentos exclusivos!")

Explicación: Los conjuntos (sets) son muy eficientes para verificar membresía con in.

14
Clasificador de triángulos
Difícil
Problema: Crea variables a = 5, b = 5, c = 5 (lados de un triángulo). Determina si es válido y clasifícalo como equilátero, isósceles o escaleno.

✅ Solución:

a = 5 b = 5 c = 5 # Primero verificamos si es un triángulo válido if a + b > c and a + c > b and b + c > a: print("✅ Es un triángulo válido") # Clasificamos el tipo de triángulo if a == b == c: print("Tipo: Equilátero (todos los lados iguales)") elif a == b or a == c or b == c: print("Tipo: Isósceles (dos lados iguales)") else: print("Tipo: Escaleno (todos los lados diferentes)") else: print("❌ No es un triángulo válido")

Explicación: Un triángulo es válido si la suma de dos lados es mayor al tercero. Clasificamos por igualdad de lados.

15
Sistema de calificación de películas
Medio
Problema: Crea variables edad = 16 y pelicula = "R" (G, PG, PG-13, R). Determina si la persona puede ver la película según las clasificaciones de edad.

✅ Solución:

edad = 16 pelicula = "R" match pelicula: case "G": print("✅ Película apta para todas las edades") puede_ver = True case "PG": print("Se recomienda supervisión parental") puede_ver = True case "PG-13": if edad >= 13: print("✅ Puedes ver la película") puede_ver = True else: print("❌ Necesitas tener al menos 13 años") puede_ver = False case "R": if edad >= 17: print("✅ Puedes ver la película") puede_ver = True else: print("❌ Necesitas tener al menos 17 años") puede_ver = False case _: print("Clasificación no válida") puede_ver = False if puede_ver: print("🍿 ¡Disfruta la película!") else: print("📚 Mejor estudia o ve algo más apropiado")

Explicación: Combinamos match/case con condicionales internos para validar edad según clasificación.

16
Validador de email simple
Medio
Problema: Crea una variable email = "usuario@ejemplo.com". Valida que contenga exactamente un "@", que tenga texto antes y después del "@", y que termine en ".com" o ".es".

✅ Solución:

email = "usuario@ejemplo.com" tiene_arroba = email.count("@") == 1 terminaciones_validas = [".com", ".es", ".org", ".net"] tiene_terminacion_valida = any(email.endswith(term) for term in terminaciones_validas) if tiene_arroba: partes = email.split("@") usuario = partes[0] dominio = partes[1] tiene_usuario = len(usuario) > 0 tiene_dominio = len(dominio) > 0 and "." in dominio else: tiene_usuario = False tiene_dominio = False if tiene_arroba and tiene_usuario and tiene_dominio and tiene_terminacion_valida: print("✅ Email válido") else: print("❌ Email inválido") if not tiene_arroba: print(" - Debe contener exactamente un @") if not tiene_usuario: print(" - Debe tener usuario antes del @") if not tiene_dominio: print(" - Debe tener dominio después del @") if not tiene_terminacion_valida: print(" - Debe terminar en .com, .es, .org o .net")

Explicación: Validación paso a paso usando métodos de string como count(), split() y endswith().

17
Juego de piedra, papel o tijera
Medio
Problema: Crea variables jugador = "piedra" y maquina = "papel". Implementa la lógica del juego y determina quién gana usando match/case.

✅ Solución:

jugador = "piedra" maquina = "papel" print(f"Jugador: {jugador}") print(f"Máquina: {maquina}") if jugador == maquina: print("🤝 ¡Empate!") else: match (jugador, maquina): case ("piedra", "tijera") | ("papel", "piedra") | ("tijera", "papel"): print("🎉 ¡Ganaste!") case ("tijera", "piedra") | ("piedra", "papel") | ("papel", "tijera"): print("😔 Perdiste...") case _: print("❌ Jugada no válida") # Explicación de la jugada match (jugador, maquina): case ("piedra", "tijera"): print("La piedra rompe las tijeras") case ("papel", "piedra"): print("El papel envuelve la piedra") case ("tijera", "papel"): print("Las tijeras cortan el papel") case _: pass

Explicación: Usamos tuplas en match/case para comparar combinaciones de jugadas. El operador | permite múltiples patrones.

18
Clasificador de IMC avanzado
Difícil
Problema: Crea variables peso = 70, altura = 1.75, edad = 25, sexo = "M". Calcula el IMC y clasifícalo considerando edad y sexo para dar recomendaciones específicas.

✅ Solución:

peso = 70 altura = 1.75 edad = 25 sexo = "M" # M = Masculino, F = Femenino imc = peso / (altura ** 2) # Clasificación básica del IMC if imc < 18.5: categoria = "Bajo peso" color = "🔵" elif imc < 25: categoria = "Peso normal" color = "🟢" elif imc < 30: categoria = "Sobrepeso" color = "🟡" else: categoria = "Obesidad" color = "🔴" print(f"IMC: {imc:.1f}") print(f"Categoría: {color} {categoria}") # Recomendaciones específicas por edad y sexo if edad < 18: print("⚠️ Consulta con un pediatra para evaluación apropiada") elif edad > 65: print("👴 Los rangos pueden variar en adultos mayores") if sexo == "M": if 20 <= imc <= 25: print("✅ Rango óptimo para hombres") elif imc > 25: print("💪 Considera ejercicio de fuerza y cardio") else: # Femenino if 19 <= imc <= 24: print("✅ Rango óptimo para mujeres") elif imc < 19: print("🥗 Considera aumentar ingesta calórica saludable") # Recomendación general match categoria: case "Bajo peso": print("📈 Recomendación: Aumentar peso gradualmente") case "Peso normal": print("🎯 Recomendación: Mantener estilo de vida saludable") case "Sobrepeso": print("📉 Recomendación: Reducir peso moderadamente") case "Obesidad": print("🏥 Recomendación: Consultar con profesional de salud")

Explicación: Combinamos cálculos matemáticos con múltiples condicionales para dar consejos personalizados.

19
Sistema de autenticación
Difícil
Problema: Crea un diccionario usuarios = {"admin": "123", "user": "abc"}, variables usuario = "admin", password = "123", intentos = 1. Simula un sistema de login con límite de intentos.

✅ Solución:

usuarios = {"admin": "123", "user": "abc", "guest": "456"} usuario = "admin" password = "123" intentos = 1 max_intentos = 3 print(f"🔐 Intento de login #{intentos}") print(f"Usuario: {usuario}") # Verificar si el usuario existe if usuario not in usuarios: print("❌ Usuario no encontrado") print("📝 ¿Necesitas registrarte?") else: # Verificar contraseña if usuarios[usuario] == password: print("✅ Login exitoso") # Permisos según tipo de usuario match usuario: case "admin": print("👑 Acceso de administrador") print(" - Gestionar usuarios") print(" - Ver reportes") print(" - Configuración del sistema") case "user": print("👤 Acceso de usuario estándar") print(" - Ver perfil") print(" - Editar datos personales") case "guest": print("👀 Acceso de invitado") print(" - Solo lectura") case _: print("🔒 Acceso básico") else: print("❌ Contraseña incorrecta") intentos_restantes = max_intentos - intentos if intentos_restantes > 0: print(f"⚠️ Te quedan {intentos_restantes} intentos") else: print("🚫 Cuenta bloqueada por múltiples intentos fallidos") print("🕐 Intenta de nuevo en 30 minutos")

Explicación: Sistema completo que verifica existencia de usuario, valida contraseña, gestiona intentos y asigna permisos.

20
Analizador de datos de ventas
Difícil
Problema: Crea variables ventas = [150, 200, 180, 300, 250], meta = 200, vendedor = "Ana". Analiza el rendimiento, calcula comisiones y determina bonificaciones.

✅ Solución:

ventas = [150, 200, 180, 300, 250] meta = 200 vendedor = "Ana" # Cálculos básicos total_ventas = sum(ventas) promedio_ventas = total_ventas / len(ventas) ventas_sobre_meta = [v for v in ventas if v >= meta] dias_sobre_meta = len(ventas_sobre_meta) print(f"=== REPORTE DE VENTAS - {vendedor} ===") print(f"Total vendido: ${total_ventas}") print(f"Promedio diario: ${promedio_ventas:.1f}") print(f"Meta diaria: ${meta}") print(f"Días que superó la meta: {dias_sobre_meta}/{len(ventas)}") # Análisis de rendimiento porcentaje_exito = (dias_sobre_meta / len(ventas)) * 100 if porcentaje_exito >= 80: rendimiento = "Excelente" emoji = "🌟" elif porcentaje_exito >= 60: rendimiento = "Bueno" emoji = "👍" elif porcentaje_exito >= 40: rendimiento = "Regular" emoji = "👌" else: rendimiento = "Necesita mejorar" emoji = "📈" print(f"Rendimiento: {emoji} {rendimiento} ({porcentaje_exito:.1f}%)") # Sistema de comisiones comision_base = 0.05 # 5% if total_ventas >= 1000: comision_total = comision_base + 0.02 # +2% extra bonus_descripcion = "Bonus por volumen alto" elif promedio_ventas >= meta: comision_total = comision_base + 0.01 # +1% extra bonus_descripcion = "Bonus por superar meta promedio" else: comision_total = comision_base bonus_descripcion = "Sin bonus" comision_ganada = total_ventas * comision_total print(f"\n💰 COMISIONES:") print(f"Comisión base: {comision_base*100}%") print(f"Comisión total: {comision_total*100}%") print(f"Dinero ganado: ${comision_ganada:.2f}") print(f"Bonus: {bonus_descripcion}") # Recomendaciones print(f"\n📋 RECOMENDACIONES:") if promedio_ventas < meta: diferencia = meta - promedio_ventas print(f"- Aumentar ventas en ${diferencia:.1f} diarios para alcanzar meta") if max(ventas) >= 300: print("- ¡Excelente! Tienes potencial para ventas altas") if min(ventas) < meta * 0.8: print("- Trabajar en consistencia, evitar días de ventas muy bajas")

Explicación: Análisis completo que combina operaciones con listas, cálculos estadísticos, sistema de bonificaciones y recomendaciones personalizadas.