20 ejercicios de Python resueltos, ordenados de principiante a avanzado. Cada uno incluye el enunciado, una solución comentada y la salida esperada para que compruebes tu resultado. Están pensados para practicar de verdad: escribe tú el código antes de mirar la solución.
Si es tu primer contacto con el lenguaje, empieza por nuestro tutorial de Python para principiantes y vuelve aquí a practicar.
Índice de ejercicios
- Nivel principiante — variables, condicionales, bucles, listas y cadenas (1–8).
- Nivel intermedio — comprensión de listas, diccionarios, FizzBuzz, primos, ficheros (9–14).
- Nivel avanzado — generadores, decoradores, expresiones regulares, *args/**kwargs (15–18).
- Programación orientada a objetos (POO) — clases y objetos (19–20).
Nivel principiante
Ejercicios para construir una base sólida: sintaxis, variables, condicionales, bucles, listas y cadenas.
1. «Hola, mundo»
Enunciado. Imprime el texto Hola, mundo en la consola.
print("Hola, mundo")
Salida: Hola, mundo
2. Suma y multiplicación con variables
Enunciado. Guarda dos números en variables y muestra su suma y su producto.
a = 5
b = 3
print("Suma:", a + b)
print("Producto:", a * b)
Salida: Suma: 8 · Producto: 15
3. ¿Par o impar?
Enunciado. Pide un número y di si es par o impar (usa el operador módulo %).
n = int(input("Escribe un número: "))
if n % 2 == 0:
print(f"{n} es par")
else:
print(f"{n} es impar")
Salida (para 7): 7 es impar
4. Juego de adivinanzas
Enunciado. Guarda un número secreto y pide al usuario que lo adivine, indicando si acertó.
secreto = 7
intento = int(input("Adivina el número (1-10): "))
if intento == secreto:
print("¡Acertaste!")
else:
print(f"Fallaste. Era el {secreto}.")
Salida (para 4): Fallaste. Era el 7.
5. Tabla de multiplicar
Enunciado. Muestra la tabla de multiplicar de un número del 1 al 10 con un bucle for.
num = 3
for i in range(1, 11):
print(f"{num} x {i} = {num * i}")
Salida: 3 x 1 = 3, 3 x 2 = 6, … , 3 x 10 = 30
6. Crear una lista y añadir elementos
Enunciado. Crea una lista vacía, añade tres números y muéstrala.
numeros = [] numeros.append(10) numeros.append(20) numeros.append(30) print(numeros)
Salida: [10, 20, 30]
7. Recorrer una lista con for
Enunciado. Recorre una lista de animales e imprime una frase por cada uno.
animales = ["gato", "perro", "pájaro"]
for animal in animales:
print("Tengo un", animal)
Salida: Tengo un gato / Tengo un perro / Tengo un pájaro
8. Contar vocales de una palabra
Enunciado. Cuenta cuántas vocales tiene una palabra.
palabra = "murcielago"
vocales = "aeiou"
total = sum(1 for letra in palabra if letra in vocales)
print(f"{palabra} tiene {total} vocales")
Salida: murcielago tiene 5 vocales
Nivel intermedio
Ya dominas lo básico: toca eficiencia, estructuras de datos y lógica algorítmica.
9. Comprensión de listas
Enunciado. Genera la lista de los cuadrados del 0 al 9 en una sola línea.
cuadrados = [x**2 for x in range(10)] print(cuadrados)
Salida: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
10. FizzBuzz
Enunciado. Del 1 al 15, imprime «Fizz» si el número es múltiplo de 3, «Buzz» si lo es de 5, «FizzBuzz» si lo es de ambos, y el número en caso contrario. Es la pregunta de entrevista más clásica.
for n in range(1, 16):
if n % 15 == 0:
print("FizzBuzz")
elif n % 3 == 0:
print("Fizz")
elif n % 5 == 0:
print("Buzz")
else:
print(n)
Salida: 1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz
11. ¿Es un número primo?
Enunciado. Determina si un número es primo.
def es_primo(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
print(es_primo(29))
print(es_primo(30))
Salida: True / False
12. Frecuencia de palabras con un diccionario
Enunciado. Cuenta cuántas veces aparece cada palabra en una frase.
frase = "python es facil python es potente"
frecuencia = {}
for palabra in frase.split():
frecuencia[palabra] = frecuencia.get(palabra, 0) + 1
print(frecuencia)
Salida: {'python': 2, 'es': 2, 'facil': 1, 'potente': 1}
13. Detectar un palíndromo
Enunciado. Comprueba si una palabra se lee igual del derecho y del revés.
palabra = "reconocer"
if palabra == palabra[::-1]:
print(f"{palabra} es un palíndromo")
else:
print(f"{palabra} no es un palíndromo")
Salida: reconocer es un palíndromo
14. Leer un fichero y manejar errores
Enunciado. Intenta leer un fichero y controla el caso de que no exista con try/except.
try:
with open("archivo.txt", "r", encoding="utf-8") as f:
print(f.read())
except FileNotFoundError:
print("El archivo no existe.")
Salida (si no existe): El archivo no existe.
Nivel avanzado
Características potentes de Python que marcan la diferencia en código profesional.
15. Generador de la sucesión de Fibonacci
Enunciado. Crea un generador con yield que produzca los números de Fibonacci uno a uno (eficiente en memoria).
def fibonacci():
a, b = 0, 1
while True:
yield a
a, b = b, a + b
gen = fibonacci()
print([next(gen) for _ in range(10)])
Salida: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]
16. Decorador que mide el tiempo de ejecución
Enunciado. Escribe un decorador que mida cuánto tarda una función. Aprende más en nuestra guía completa de decoradores en Python.
import time
def temporizador(func):
def envoltura(*args, **kwargs):
inicio = time.perf_counter()
resultado = func(*args, **kwargs)
print(f"{func.__name__} tardó {time.perf_counter() - inicio:.4f} s")
return resultado
return envoltura
@temporizador
def tarea():
time.sleep(1)
tarea()
Salida: tarea tardó 1.0007 s (el tiempo exacto varía)
17. Extraer correos con expresiones regulares
Enunciado. Encuentra todas las direcciones de correo dentro de un texto usando el módulo re.
import re
texto = "Contacto: ana@example.com y pedro@mail.com"
correos = re.findall(r"\b[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b", texto)
print(correos)
Salida: ['ana@example.com', 'pedro@mail.com']
18. Funciones con *args y **kwargs
Enunciado. Crea una función que acepte cualquier número de argumentos y los sume. Practica más en ejercicios de Python con funciones.
def sumar(*numeros, **info):
total = sum(numeros)
if info.get("mostrar"):
print("Sumando:", numeros)
return total
print(sumar(1, 2, 3, 4, mostrar=True))
Salida: Sumando: (1, 2, 3, 4) / 10
Programación orientada a objetos (POO)
La POO organiza el código en clases y objetos. Si quieres más, tenemos una página entera de ejercicios de POO en Python.
19. Tu primera clase: Coche
Enunciado. Crea una clase Coche con marca y velocidad, y un método para acelerar.
class Coche:
def __init__(self, marca):
self.marca = marca
self.velocidad = 0
def acelerar(self, incremento):
self.velocidad += incremento
def __str__(self):
return f"{self.marca} a {self.velocidad} km/h"
mi_coche = Coche("Seat")
mi_coche.acelerar(50)
print(mi_coche)
Salida: Seat a 50 km/h
20. Cuenta bancaria con encapsulación
Enunciado. Modela una CuentaBancaria que permita ingresar y retirar dinero sin quedar en negativo.
class CuentaBancaria:
def __init__(self, saldo=0):
self.saldo = saldo
def ingresar(self, cantidad):
self.saldo += cantidad
def retirar(self, cantidad):
if cantidad > self.saldo:
print("Saldo insuficiente")
else:
self.saldo -= cantidad
cuenta = CuentaBancaria(100)
cuenta.ingresar(50)
cuenta.retirar(200)
print("Saldo:", cuenta.saldo)
Salida: Saldo insuficiente / Saldo: 150
Consejos para practicar Python de forma eficaz
- Escribe el código tú mismo antes de mirar la solución: leer no es programar.
- Sigue la guía de estilo PEP 8: nombres descriptivos y código legible.
- Depura con calma: usa
print()o el depurador para entender el flujo. Tienes una guía para depurar Python en VS Code. - Practica por temas: dedica sesiones a listas, funciones o POO por separado.
- Repite en unos días los ejercicios que te costaron: así se fija el aprendizaje.
Sigue practicando
Cuando domines estos 20 ejercicios, continúa con recursos para subir de nivel:
- Tutorial de Python para principiantes — repasa la teoría paso a paso.
- Ejercicios de POO en Python — clases, herencia y objetos.
- Ejercicios de Python con funciones — profundiza en funciones y parámetros.
- Patrones de diseño en Python — el salto a código profesional.
- Documentación oficial de Python — la referencia definitiva.
Preguntas frecuentes sobre los ejercicios de Python
¿Estos ejercicios de Python están resueltos?
Sí. Los 20 ejercicios incluyen la solución comentada y la salida esperada, para que compruebes tu resultado tras intentarlo por tu cuenta.
¿Para qué nivel son?
Para todos: empiezan con ejercicios sencillos para principiantes y avanzan hacia nivel intermedio, avanzado y POO, así que puedes subir a tu ritmo.
¿Necesito instalar algo?
No necesariamente. Puedes resolverlos con Python instalado en tu equipo o en cualquier editor de Python online. Lo importante es que escribas tú el código en lugar de solo leerlo.
¿Hay ejercicios de POO?
Sí, los ejercicios 19 y 20 son de programación orientada a objetos. Si quieres más, tienes una página dedicada a ejercicios de POO en Python.
¿Son gratis?
Sí, todos los ejercicios de esta página son completamente gratuitos.
¿Por dónde empiezo si nunca he programado?
Empieza por el tutorial de Python para principiantes y, cuando tengas las bases, vuelve a estos ejercicios para practicar.