Practicar con ejercicios pequeños es una de las formas más eficaces de aprender Python. Leer teoría ayuda a comprender conceptos, pero resolver problemas obliga a pensar, probar, equivocarse y corregir. En esta guía encontrarás quince ejercicios progresivos con soluciones explicadas. Puedes escribir cada programa desde cero, ejecutarlo y después comparar tu resultado con la propuesta.
Antes de empezar, conviene repasar Python para principiantes, las funciones, las listas, los diccionarios y el manejo de excepciones. La documentación oficial del tutorial de Python y la referencia de funciones integradas son fuentes excelentes para consultar dudas.
Cómo aprovechar los ejercicios
No copies la solución inmediatamente. Primero escribe ejemplos de entrada y salida, divide el problema en pasos y crea una primera versión sencilla. Después prueba valores normales, límites, entradas vacías y datos incorrectos. Cuando termines, compara no solo el resultado, sino también la claridad y la facilidad para modificar el código.
1. Saludar al usuario
Pide un nombre y muestra un saludo personalizado.
nombre = input("¿Cómo te llamas? ").strip()
if nombre:
print(f"Hola, {nombre}!")
else:
print("Hola, visitante!")
strip() elimina espacios de los extremos. El condicional evita mostrar un saludo vacío.
2. Convertir grados Celsius a Fahrenheit
celsius = float(input("Temperatura en °C: "))
fahrenheit = celsius * 9 / 5 + 32
print(f"{celsius:.1f} °C equivalen a {fahrenheit:.1f} °F")
Este ejercicio practica conversión de tipos, operaciones y f-strings. Para una versión robusta, captura ValueError.
3. Comprobar si un número es par
numero = int(input("Número entero: "))
if numero % 2 == 0:
print("Es par")
else:
print("Es impar")
El operador módulo devuelve el resto. Si el resto al dividir entre dos es cero, el número es par.
4. Encontrar el mayor de tres números
numeros = [
float(input("Primer número: ")),
float(input("Segundo número: ")),
float(input("Tercer número: ")),
]
print(f"El mayor es {max(numeros)}")
También puedes resolverlo con varios if, pero max() expresa mejor la intención.
5. Sumar los números de una lista
valores = [12, 5, 8, 20]
total = 0
for valor in valores:
total += valor
print(total)
Después compara tu solución con sum(valores). Implementar primero el bucle ayuda a entender cómo funciona la acumulación.
6. Contar vocales
def contar_vocales(texto):
vocales = set("aeiouáéíóúü")
return sum(1 for letra in texto.lower() if letra in vocales)
frase = input("Escribe una frase: ")
print(contar_vocales(frase))
Un set facilita las pruebas de pertenencia. La expresión generadora produce un uno por cada vocal.
7. Invertir una cadena
texto = input("Texto: ")
invertido = texto[::-1]
print(invertido)
El slicing con paso -1 recorre la cadena desde el final. Como práctica adicional, implementa la inversión con un bucle.
8. Detectar un palíndromo
def normalizar(texto):
return "".join(caracter.lower() for caracter in texto if caracter.isalnum())
texto = input("Palabra o frase: ")
limpio = normalizar(texto)
print("Es palíndromo" if limpio == limpio[::-1] else "No es palíndromo")
La normalización elimina espacios y signos. Así una frase puede compararse de manera justa.
9. Crear una tabla de multiplicar
numero = int(input("Tabla del: "))
for multiplicador in range(1, 11):
resultado = numero * multiplicador
print(f"{numero} × {multiplicador} = {resultado}")
range(1, 11) genera del uno al diez porque el límite final no se incluye.
10. Eliminar duplicados conservando el orden
elementos = [3, 1, 3, 2, 1, 5]
unicos = list(dict.fromkeys(elementos))
print(unicos)
Los diccionarios modernos conservan el orden de inserción. Como alternativa educativa, usa un set de valores vistos y una lista de salida.
11. Contar palabras
from collections import Counter
texto = "python es claro y python es práctico"
palabras = texto.lower().split()
frecuencias = Counter(palabras)
print(frecuencias)
Para texto real necesitarás limpiar puntuación y definir qué se considera palabra.
12. Calcular factorial
def factorial(numero):
if numero < 0:
raise ValueError("No se admite un número negativo")
resultado = 1
for valor in range(2, numero + 1):
resultado *= valor
return resultado
print(factorial(5))
El factorial de cero es uno. La versión iterativa evita problemas de profundidad recursiva.
13. Comprobar números primos
def es_primo(numero):
if numero < 2:
return False
limite = int(numero ** 0.5)
for divisor in range(2, limite + 1):
if numero % divisor == 0:
return False
return True
Solo es necesario comprobar divisores hasta la raíz cuadrada. Prueba con 2, 3, 4, 17 y 25.
14. Leer un archivo y contar líneas
from pathlib import Path
ruta = Path("notas.txt")
try:
with ruta.open("r", encoding="utf-8") as archivo:
cantidad = sum(1 for _ in archivo)
except FileNotFoundError:
print("El archivo no existe")
else:
print(f"Líneas: {cantidad}")
El uso de with garantiza el cierre del archivo. Especificar UTF-8 evita depender de la configuración del sistema.
15. Agenda simple con diccionario
agenda = {}
while True:
print("1. Añadir 2. Buscar 0. Salir")
opcion = input("Opción: ").strip()
if opcion == "0":
break
if opcion == "1":
nombre = input("Nombre: ").strip().title()
telefono = input("Teléfono: ").strip()
if nombre and telefono:
agenda[nombre] = telefono
elif opcion == "2":
nombre = input("Nombre: ").strip().title()
print(agenda.get(nombre, "Contacto no encontrado"))
else:
print("Opción inválida")
Este ejercicio combina bucles, condiciones, entrada, diccionarios y validación. Puedes ampliarlo guardando los datos en JSON.
Cómo probar tus soluciones
Crea casos normales y extremos. Para el factorial prueba cero y negativos. Para primos usa números pequeños y grandes. Para cadenas usa mayúsculas, acentos, espacios y símbolos. Cuando una función sea independiente de input(), añade pruebas con assert:
assert contar_vocales("Python") == 1
assert factorial(0) == 1
assert es_primo(17) is True
assert es_primo(18) is False
Mejoras para seguir practicando
Convierte cada ejercicio en una función con parámetros y retorno. Añade anotaciones de tipo, docstrings y manejo de errores. Después reúne varios ejercicios en un menú, guarda resultados en archivos y crea una pequeña suite de tests. También puedes medir distintas soluciones y comparar legibilidad antes que microoptimizaciones.
Errores frecuentes
Los principiantes suelen olvidar convertir el resultado de input(), usar nombres poco claros, mezclar toda la lógica en el nivel global, capturar excepciones demasiado amplias y no probar entradas vacías. Otro error habitual es copiar una solución sin poder explicarla. Una solución más corta no siempre es mejor si oculta la intención.
Conclusión
Estos quince ejercicios cubren entrada, salida, condiciones, bucles, funciones, colecciones, archivos y validación. Resuélvelos en orden, modifica requisitos y crea casos de prueba. El progreso real aparece cuando puedes explicar por qué una solución funciona, detectar sus límites y adaptarla a una necesidad nueva.






