Condicionales en Python — ejercicios con solución y chuletario completo
Los condicionales en Python ejercicios con solución son la mejor forma de afianzar if, elif y else. Ya viste la teoría y practicaste con programas reales. Ahora toca resolver por tu cuenta.
En este artículo encontrarás cuatro ejercicios en tres niveles de dificultad, con especial atención al error de confundir and con or en condiciones compuestas, uno de los más traicioneros de FP1.
Como siempre: intenta resolverlo, usa la pista si llevas más de 10 minutos atascado, y compara con la solución comentada, recuerdas además echar un vistazo al desarrollo del código en pythontutor.com
Table of Contents
Cómo usar este artículo
Lee el enunciado → intenta resolverlo en VS Code → si no avanzas, lee la pista → compara tu solución. No saltes directamente a las soluciones.
Estos condicionales en Python ejercicios están pensados para que salgas sabiendo aplicarlos en cualquier situación.
Condicionales en Python Ejercicios — Nivel básico
Ejercicio 1 — Sistema de calificación de películas
Escribe un programa que pida la edad del usuario y la clasificación de una película, y determine si puede verla. Las clasificaciones son: G (todos los públicos), PG (recomendado acompañamiento de adultos, menores de 10), PG-13 (no recomendado menores de 13), R (no recomendado menores de 17), NC-17 (solo mayores de 18).
La salida debe ser:
Edad: 15 Clasificación de la película: R --- Resultado --- Clasificación R: no recomendado para menores de 17 años Tu edad: 15 años Acceso: ✗ No puedes ver esta película sin acompañante adulto
💡 Pista: Usa elif para cada clasificación en orden de más a menos restrictiva. El error clásico aquí es usar or cuando necesitas and — por ejemplo para «mayor de 13 Y menor de 17». Recuerda: and significa que ambas condiciones deben cumplirse al mismo tiempo, or significa que basta con que se cumpla una.
Ejercicio 2 — Calculadora de impuestos por tramo de renta
En España el IRPF se calcula por tramos. Escribe un programa que pida el salario anual bruto y calcule el impuesto a pagar según estos tramos simplificados:
- Hasta 12.450€ → 19%
- De 12.450€ a 20.200€ → 24%
- De 20.200€ a 35.200€ → 30%
- De 35.200€ a 60.000€ → 37%
- Más de 60.000€ → 45%
La salida debe ser:
Salario bruto anual (€): 28000 --- Cálculo de IRPF --- Salario bruto: 28000.0 € Tramo: 30% Impuesto: 8400.0 € Salario neto: 19600.0 € Salario mensual neto: 1633.33 €
💡 Pista: Este es un sistema de tramos simplificado — aplica el porcentaje sobre todo el salario, no solo sobre la parte del tramo (eso sería más complejo). El error típico aquí es el orden de los elif — si pones el tramo del 45% antes que el del 37%, todos los salarios altos caerán en el 45% aunque deberían ir al 37%. Ordena siempre de menor a mayor salario.
Condicionales en Python Ejercicios — Nivel Intermedio
Ejercicio 3 — Validador de contraseña segura
Escribe un programa que pida una contraseña y evalúe su seguridad según estos criterios, mostrando qué criterios cumple y cuáles no:
- Mínimo 8 caracteres → +1 punto
- Contiene mayúsculas → +1 punto
- Contiene minúsculas → +1 punto
- Contiene números → +1 punto
- Contiene caracteres especiales (
!@#$%^&*) → +1 punto
Clasificación final: 0-2 puntos = Muy débil, 3 puntos = Débil, 4 puntos = Fuerte, 5 puntos = Muy fuerte.
Contraseña: Python@2024 --- Análisis de contraseña --- ✓ Longitud suficiente (10 caracteres) ✓ Contiene mayúsculas ✓ Contiene minúsculas ✓ Contiene números ✓ Contiene caracteres especiales Puntuación: 5/5 Seguridad: Muy fuerte 🔒
💡 Pista: Usa any() con una expresión generadora para comprobar cada criterio, por ejemplo any(c.isupper() for c in contrasena) comprueba si algún carácter es mayúscula. El error de and/or aparece aquí si intentas combinar condiciones: «tiene mayúsculas Y minúsculas» necesita and, «tiene mayúsculas O minúsculas» necesita or. Son cosas distintas, piénsalo bien antes de escribirlo.
Condicionales en Python Ejercicios — Desafío Final
Ejercicio 4 — Juego de adivinar el número
El clásico. Escribe un programa que genere un número aleatorio entre 1 y 100 y deje al jugador adivinarlo. El programa debe dar pistas de «demasiado alto» o «demasiado bajo» y llevar la cuenta de intentos. Al final muestra cuántos intentos necesitó.
=== ADIVINA EL NÚMERO === Estoy pensando en un número entre 1 y 100... Intento 1 — Tu número: 50 → Demasiado bajo Intento 2 — Tu número: 75 → Demasiado alto Intento 3 — Tu número: 63 → Demasiado bajo Intento 4 — Tu número: 69 → ¡Correcto! 🎉 --- Resultado --- Adivinaste en 4 intentos Valoración: Muy bien 👏
Valoración según intentos: 1-3 = Increíble, 4-6 = Muy bien, 7-10 = Bien, más de 10 = Sigue practicando.
💡 Pistas:
- Importa
randomal principio:import randomy genera el número conrandom.randint(1, 100) - Necesitas un bucle
whilepara repetir hasta que acierte, veremos los bucles en profundidad en el próximo tema, pero para este ejercicio funciona así:while adivinado == False:y cuando acierte cambiaadivinado = True - El error de
and/oraparece si intentas comprobar el rango de intentos para la valoración: «entre 4 y 6 intentos» esintentos >= 4 and intentos <= 6, NOintentos >= 4 or intentos <= 6— elordejaría pasar cualquier número
Soluciones Comentadas
Solución Ejercicio 1:
# Sistema de calificación de películas
edad = int(input("Edad: "))
clasificacion = input("Clasificación de la película: ").upper()
restricciones = {
"G": (0, "todos los públicos"),
"PG": (10, "recomendado acompañamiento menores de 10"),
"PG-13": (13, "no recomendado menores de 13"),
"R": (17, "no recomendado menores de 17"),
"NC-17": (18, "solo mayores de 18")
}
print(f"\n--- Resultado ---")
if clasificacion not in restricciones:
print("Clasificación no reconocida")
else:
edad_minima, descripcion = restricciones[clasificacion]
print(f"Clasificación {clasificacion}: {descripcion}")
print(f"Tu edad: {edad} años")
if edad >= edad_minima:
print("Acceso: ✓ Puedes ver esta película")
else:
print("Acceso: ✗ No puedes ver esta película sin acompañante adulto")
Solución Ejercicio 2:
# Calculadora de impuestos IRPF
salario = float(input("Salario bruto anual (€): "))
if salario <= 12450:
tramo = 19
elif salario <= 20200:
tramo = 24
elif salario <= 35200:
tramo = 30
elif salario <= 60000:
tramo = 37
else:
tramo = 45
impuesto = round(salario * tramo / 100, 2)
neto = round(salario - impuesto, 2)
mensual = round(neto / 12, 2)
print(f"\n--- Cálculo de IRPF ---")
print(f"Salario bruto: {salario} €")
print(f"Tramo: {tramo}%")
print(f"Impuesto: {impuesto} €")
print(f"Salario neto: {neto} €")
print(f"Salario mensual neto: {mensual} €")
Solución Ejercicio 3:
# Validador de contraseña segura
contrasena = input("Contraseña: ")
especiales = "!@#$%^&*"
puntos = 0
print(f"\n--- Análisis de contraseña ---")
if len(contrasena) >= 8:
print(f"✓ Longitud suficiente ({len(contrasena)} caracteres)")
puntos += 1
else:
print(f"✗ Demasiado corta ({len(contrasena)} caracteres, mínimo 8)")
if any(c.isupper() for c in contrasena):
print("✓ Contiene mayúsculas")
puntos += 1
else:
print("✗ Sin mayúsculas")
if any(c.islower() for c in contrasena):
print("✓ Contiene minúsculas")
puntos += 1
else:
print("✗ Sin minúsculas")
if any(c.isdigit() for c in contrasena):
print("✓ Contiene números")
puntos += 1
else:
print("✗ Sin números")
if any(c in especiales for c in contrasena):
print("✓ Contiene caracteres especiales")
puntos += 1
else:
print("✗ Sin caracteres especiales")
if puntos <= 2:
seguridad = "Muy débil 🔓"
elif puntos == 3:
seguridad = "Débil 🔐"
elif puntos == 4:
seguridad = "Fuerte 🔒"
else:
seguridad = "Muy fuerte 🔒"
print(f"\nPuntuación: {puntos}/5")
print(f"Seguridad: {seguridad}")
Solución Ejercicio 4:
# Juego de adivinar el número
import random
numero_secreto = random.randint(1, 100)
intentos = 0
adivinado = False
print("=== ADIVINA EL NÚMERO ===")
print("Estoy pensando en un número entre 1 y 100...\n")
while not adivinado:
intentos += 1
intento = int(input(f"Intento {intentos} — Tu número: "))
if intento < numero_secreto:
print("→ Demasiado bajo\n")
elif intento > numero_secreto:
print("→ Demasiado alto\n")
else:
print("→ ¡Correcto! 🎉")
adivinado = True
print(f"\n--- Resultado ---")
print(f"Adivinaste en {intentos} intentos")
if intentos <= 3:
print("Valoración: Increíble 🏆")
elif intentos <= 6:
print("Valoración: Muy bien 👏")
elif intentos <= 10:
print("Valoración: Bien ✓")
else:
print("Valoración: Sigue practicando 💪")
Chuletario — Condicionales en Python
Este chuletario de condicionales en Python ejercicios recoge todo lo esencial del tema en un solo lugar.
# ============================================
# CHULETARIO — Condicionales en Python
# Sergio Learns · sergiolearns.com
# ============================================
# ESTRUCTURA BÁSICA
if condicion:
# se ejecuta si condicion es True
elif otra_condicion:
# se ejecuta si otra_condicion es True
else:
# se ejecuta si ninguna condicion es True
# REGLAS OBLIGATORIAS
# 1. Los : al final son siempre obligatorios
# 2. La indentación (4 espacios) es siempre obligatoria
# 3. El orden de elif importa — de mayor a menor restricción
# OPERADORES DE COMPARACIÓN
x == 5 # igual (DOBLE ==)
x != 5 # distinto
x > 5 # mayor que
x < 5 # menor que
x >= 5 # mayor o igual
x <= 5 # menor o igual
# OJO: = asigna, == compara
x = 5 # asignación
x == 5 # comparación → True o False
# OPERADORES LÓGICOS
x > 3 and x < 10 # ambas True → True si 3 < x < 10
x < 3 or x > 10 # al menos una True
not (x > 5) # invierte → True si x <= 5
# AND vs OR — el error más común
# AND: las DOS condiciones deben cumplirse
edad >= 18 and tiene_carnet # mayor de 18 Y con carnet
# OR: basta con que UNA se cumpla
es_estudiante or es_jubilado # estudiante O jubilado
# CONDICIONAL EN UNA LÍNEA (ternario)
resultado = "Aprobado" if nota >= 5 else "Suspenso"
# PATRÓN MÁS USADO EN FP1
# Clasificar con if/elif/else y guardar en variable
if valor >= 9:
categoria = "Sobresaliente"
elif valor >= 7:
categoria = "Notable"
elif valor >= 5:
categoria = "Aprobado"
else:
categoria = "Suspenso"
# COMPROBAR PERTENENCIA
if "@" in email: # el @ está en el email
if "a" not in palabra: # la a NO está en la palabra
# COMPROBAR TIPO
if type(x) == int: # x es entero
if isinstance(x, float): # x es decimal (más pythónico)
# ERRORES TÍPICOS
# 1. Olvidar los : → SyntaxError
# 2. Mala indentación → IndentationError
# 3. Usar = en vez de == → SyntaxError
# 4. Elif en orden incorrecto → error silencioso
# 5. Confundir and/or → error silencioso
Python conditionals exercises — 4 solved with solutions and cheat sheet
Python conditionals exercises with solutions are the best way to cement if, elif and else. You’ve seen the theory and practised with real programs. Now it’s time to solve on your own.
Four exercises across three levels, with special focus on the and vs or mistake, one of the trickiest in FP1.
Basic Level
Exercise 1 — Movie rating system
Ask for the user’s age and a movie rating, and determine if they can watch it. Ratings: G (all ages), PG (parental guidance under 10), PG-13 (not recommended under 13), R (not recommended under 17), NC-17 (18+ only).
💡 Hint: Use elif for each rating from most to least restrictive. The classic and/or mistake: «between 13 and 17 years old» needs and — age >= 13 and age < 17. Using or would mean ANY age passes.
Exercise 2 — Income tax calculator
Ask for annual gross salary and calculate tax using these simplified brackets:
- Up to €12,450 → 19%
- €12,450–€20,200 → 24%
- €20,200–€35,200 → 30%
- €35,200–€60,000 → 37%
- Over €60,000 → 45%
Also show net salary and monthly net salary.
💡 Hint: Order elif from lowest to highest salary. Wrong order = silent error where high earners get wrong rate.
Intermediate Level
Exercise 3 — Password strength validator
Ask for a password and score it on 5 criteria (1 point each): 8+ characters, uppercase letters, lowercase letters, numbers, special characters (!@#$%^&*). Classify: 0-2 = Very weak, 3 = Weak, 4 = Strong, 5 = Very strong.
💡 Hint: Use any(c.isupper() for c in password) to check each criterion. The and/or error appears if you try to combine criteria: «has uppercase AND lowercase» needs and — these are two separate requirements that both need to be true simultaneously.
Final Challenge
Exercise 4 — Number guessing game
Generate a random number 1-100 and let the player guess. Give «too high» / «too low» hints and track attempts. Rate the result: 1-3 attempts = Incredible, 4-6 = Great, 7-10 = Good, 10+ = Keep practising.
💡 Hints:
import randomand userandom.randint(1, 100)- Use
while not guessed:loop — we’ll cover loops in depth next topic - The
and/orerror in the rating: «between 4 and 6 attempts» isattempts >= 4 and attempts <= 6— NOTor. Withorevery number would pass since any number is either ≥4 or ≤6.
(Solutions same as Spanish version above)
Cheat sheet — Python conditionals
# ============================================
# CHEAT SHEET — Python Conditionals
# Sergio Learns · sergiolearns.com
# ============================================
# BASIC STRUCTURE
if condition:
# runs if condition is True
elif other_condition:
# runs if other_condition is True
else:
# runs if no condition is True
# MANDATORY RULES
# 1. Colon : at end — always required
# 2. 4-space indentation — always required
# 3. elif order matters — highest condition first
# COMPARISON OPERATORS
x == 5 # equal (DOUBLE ==)
x != 5 # not equal
x > 5 # greater than
x < 5 # less than
x >= 5 # greater or equal
x <= 5 # less or equal
# = assigns, == compares
x = 5 # assignment
x == 5 # comparison → True or False
# LOGICAL OPERATORS
x > 3 and x < 10 # BOTH must be True
x < 3 or x > 10 # at least ONE must be True
not (x > 5) # inverts → True if x <= 5
# AND vs OR — most common mistake
age >= 18 and has_licence # 18+ AND has licence (both required)
is_student or is_retired # student OR retired (one enough)
# TERNARY OPERATOR
result = "Passed" if grade >= 5 else "Failed"
# MOST USED FP1 PATTERN
if value >= 9:
category = "Outstanding"
elif value >= 7:
category = "Good"
elif value >= 5:
category = "Passed"
else:
category = "Failed"
# MEMBERSHIP CHECK
if "@" in email: # @ is in email
if "a" not in word: # a is NOT in word
# COMMON ERRORS
# 1. Missing : → SyntaxError
# 2. Wrong indentation → IndentationError
# 3. = instead of == → SyntaxError
# 4. Wrong elif order → silent error
# 5. and/or confusion → silent error