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

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:

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.