¿Qué proyecto de Python elegir si eres principiante?
Elige un problema cuyo resultado puedas comprobar a mano. Tu primera versión debería aceptar pocos datos, producir una salida clara y funcionar sin servicios externos. Después puedes añadir archivos, una interfaz o más reglas.
Si todavía te cuesta escribir una función sin mirar una solución, empieza por los ejercicios de funciones. Para ejecutar programas con archivos de tu equipo, sigue la guía de instalación.
Conversor de temperaturas
Resultado: convertir una temperatura de Celsius a Fahrenheit y devolver un número. No necesitas una interfaz gráfica para que sea un proyecto completo.
Versión mínima: una función convertir(celsius) y tres ejemplos de ejecución. Su entrada es un número; su salida, el cálculo celsius * 9 / 5 + 32.
- Escribe la conversión como una función sin
input. - Comprueba que 0 °C son 32 °F, 100 °C son 212 °F y −40 °C son −40 °F.
- Añade una capa separada que pida el valor y muestre el resultado.
Siguiente mejora: conversión inversa y un mensaje para texto no numérico. Mantén el cálculo separado de la lectura del teclado.
Repasa: variables y parámetros y retorno.
Cuestionario con puntuación
Resultado: presentar tres preguntas y contar respuestas correctas. Guarda cada pregunta, sus opciones y la respuesta esperada en un diccionario.
Versión mínima: una lista de preguntas y una función que compare la respuesta recibida con la esperada. La función de corrección debe poder probarse sin teclado.
- Crea tres preguntas con una sola respuesta correcta.
- Recorre la lista con un bucle y suma un punto por cada acierto.
- Muestra el resultado como «2 de 3», sin dividir si la lista está vacía.
Comprueba: todas correctas, todas incorrectas, respuestas con espacios y cero preguntas. Decide si aceptas mayúsculas y documenta esa regla.
Siguiente mejora: leer las preguntas desde JSON. Evita añadir temporizadores antes de tener la corrección bien probada.
Repasa: for, condiciones y diccionarios.
Analizador de gastos por categoría
Resultado: sumar gastos de ejemplo y obtener un total por categoría. Más abajo tienes una versión completa que puedes ejecutar en el navegador.
Versión mínima: recibe una lista de gastos, cada uno con categoria e importe, y devuelve dos resultados: el total y un diccionario de subtotales.
- Representa tres gastos con sus importes como texto decimal.
- Acumula cada importe en su categoría con
Decimal. - Comprueba una lista vacía y un gasto negativo.
Siguiente mejora: cargar un archivo JSON y validar campos ausentes. Usa datos inventados mientras desarrollas; no necesitas conectar una cuenta bancaria.
Repasa: diccionarios y excepciones.
Lista de tareas que recuerda tus cambios
Resultado: añadir tareas, verlas y marcarlas como completadas; conservarlas en tareas.json al cerrar el programa.
Versión mínima: una lista de diccionarios con id, titulo y completada. El ID debe identificar una tarea aunque su posición en la lista cambie.
- Implementa primero añadir y completar en memoria.
- Separa las funciones
cargar_tareasyguardar_tareas. - Si el archivo todavía no existe, empieza con una lista vacía. Si está dañado, informa del error antes de sobrescribirlo.
Comprueba: cerrar y abrir conserva los datos; completar un ID inexistente muestra un resultado claro; dos tareas con el mismo título tienen identidades diferentes.
Siguiente mejora: filtros de pendientes y completadas. Tienes una ruta más extensa en el proyecto de aplicación CLI.
Inventario de archivos por extensión
Resultado: leer una carpeta de prueba y mostrar cuántos archivos hay por extensión. La versión mínima solo lee nombres y no mueve ni elimina archivos.
- Crea una carpeta con dos archivos
.txt, uno.csvy un archivo sin extensión. - Recorre sus hijos directos con
Path.iterdir()y descarta directorios. - Normaliza la extensión a minúsculas y cuenta con un diccionario.
Comprueba: una carpeta vacía, extensiones en mayúsculas y archivos sin extensión. En esta versión no se recorren subcarpetas.
Siguiente mejora: guardar el inventario en CSV. El ejemplo completo está en automatizar tareas con Python.
Repasa: rutas con pathlib.
Proyecto completo: analizador de gastos paso a paso
1. Define los datos y el contrato
Cada gasto tendrá una categoría no vacía y un importe escrito como texto, por ejemplo "12.50". Aquí aceptamos importes finitos, no negativos y con un máximo de dos decimales; un importe inválido produce ValueError. Los campos ausentes quedan fuera de este primer contrato.
La función devuelve un total y un diccionario por categoría. Usamos Decimal creado desde texto para representar cantidades decimales exactas. No creamos los importes a partir de números float.
2. Calcula sin mezclar la salida
La función no imprime y no pide datos. Esto permite comprobar sus resultados en una prueba, usarla en otro programa o añadir después una interfaz.
from decimal import Decimal, InvalidOperation
def resumir_gastos(gastos):
por_categoria = {}
total = Decimal("0.00")
for gasto in gastos:
categoria = gasto["categoria"].strip()
try:
importe = Decimal(gasto["importe"])
except InvalidOperation:
raise ValueError("Importe no válido") from None
if not categoria:
raise ValueError("La categoría está vacía")
if not importe.is_finite() or importe < 0:
raise ValueError("El importe debe ser finito y no negativo")
if importe.as_tuple().exponent < -2:
raise ValueError("Usa como máximo dos decimales")
anterior = por_categoria.get(categoria, Decimal("0.00"))
por_categoria[categoria] = anterior + importe
total += importe
return total, por_categoria
gastos = [
{"categoria": "comida", "importe": "12.50"},
{"categoria": "transporte", "importe": "3.20"},
{"categoria": "comida", "importe": "7.30"},
]
total, categorias = resumir_gastos(gastos)
assert total == Decimal("23.00")
assert categorias["comida"] == Decimal("19.80")
assert resumir_gastos([]) == (Decimal("0.00"), {})
try:
resumir_gastos([{"categoria": "comida", "importe": "-1.00"}])
except ValueError:
pass
else:
raise AssertionError("Falta rechazar importes negativos")
print(f"Total: {total:.2f} €")
for categoria, importe in sorted(categorias.items()):
print(f"{categoria}: {importe:.2f} €")Total: 23.00 € comida: 19.80 € transporte: 3.20 €
3. Prueba antes de ampliar
Añade un gasto nuevo y calcula a mano su efecto. Prueba también una categoría con espacios, un importe "NaN" y un importe con tres decimales. Comprueba que los dos últimos se rechazan.
4. Guarda datos, no objetos Decimal
Cuando añadas JSON, conserva los importes como textos. El módulo json no serializa objetos Decimal automáticamente. Convierte y valida al entrar en la función, y aplica formato al mostrar el resultado.
Para trabajar con tablas externas, continúa con el proyecto de análisis de datos del curso.
Cómo terminar tu primer proyecto
- Describe su entrada y salida en dos frases.
- Incluye un ejemplo que otra persona pueda ejecutar.
- Comprueba un caso normal, uno vacío y uno inválido.
- Separa cálculos de lectura de datos y presentación.
- Escribe qué funciona y qué dejarás para la siguiente versión.
Un proyecto terminado no necesita todas las ideas que se te ocurran. Guarda las mejoras en una lista y elige solo una después de estabilizar la primera versión.
Preguntas frecuentes sobre proyectos de Python
¿Necesito saber clases para hacer un proyecto?
No para estas versiones. Puedes combinar funciones, listas y diccionarios. Las clases tienen sentido cuando te ayudan a organizar un modelo que ya entiendes.
¿Puedo hacer estos proyectos en el navegador?
El conversor, la lógica del cuestionario y el analizador de ejemplo pueden ejecutarse en el editor online. Para guardar datos entre sesiones y leer carpetas reales, utiliza Python en tu equipo.
¿Cómo evito quedarme bloqueado a mitad del proyecto?
Reduce el problema a una función con una entrada de ejemplo. Comprueba esa función antes de añadir teclado, archivos o menús. Si no puedes describir la salida esperada, concreta primero el requisito.
Convierte el proyecto en una herramienta útil
Prueba un flujo sencillo con archivos de una carpeta de práctica.
Automatizar una tarea →Fuentes y compatibilidad
Los ejemplos usan Python 3 y la biblioteca estándar. Las instrucciones de instalación se contrastaron con la documentación oficial; los ejemplos de código se verifican con las comprobaciones de estas guías.