VJOURNAL

Innovación • Sección internacional •

Proyectos de Python para principiantes: 13 programas ordenados por la habilidad que entrena cada uno

Proyectos de Python para principiantes, ordenados desde input e if hasta archivos, JSON y pathlib. Cada uno trae la función que entrena, un reto extra, la trampa que advierte la documentación oficial y cómo terminarlo en una tarde.

Portada de VJOURNAL para «Proyectos de Python para principiantes: 13 programas ordenados por la habilidad que entrena cada uno»

Respuesta breve

Empieza por un juego de adivinar el número: solo necesita input, if, un bucle y el módulo random, y cabe en una tarde. Después avanza por proyectos que añaden una idea nueva cada uno, como listas, diccionarios, archivos, CSV y JSON, y termina con un renombrador de archivos con pathlib, probado primero en copias.

18 fuentes
Elige un primer proyecto que use lo que ya sabes más una idea nueva, y recórtalo hasta que quepa en una tarde.
Lee un traceback de abajo arriba: el tutorial oficial dice que la última línea indica qué ocurrió y las de arriba, dónde.
Un generador de contraseñas va con el módulo secrets: la documentación de random advierte que no debe usarse para seguridad.

Cómo elegir un primer proyecto de Python que puedas terminar en una tarde

La mayoría de las listas de proyectos de python para principiantes son ideas en orden aleatorio. Esta va ordenada por el concepto que entrena cada proyecto, de modo que cada construcción añade algo nuevo: primero input e if, luego bucles y listas, diccionarios, archivos y, por último, los módulos de la biblioteca estándar que hacen trabajo de verdad.

La regla para elegir es sencilla. Toma un proyecto que use solo lo que ya sabes más una idea nueva y recorta su alcance hasta que la primera versión funcional quepa en una sola tarde. Una lista de tareas que añade y quita elementos es un proyecto; con usuarios y recordatorios, un mes. El tutorial de Python dice que no intenta cubrir todas las funciones, ni siquiera todas las de uso común, y remite a la referencia de la biblioteca estándar para el resto; leer una página de esa referencia por proyecto forma parte del ejercicio.

Adivinar el número, calculadora de propinas y piedra, papel o tijera: input e if

El juego de adivinar el número es el primer proyecto clásico en Python. El programa elige un número con random.randint, que según la documentación de Python devuelve un entero entre a y b, ambos extremos incluidos, y luego pide intentos y responde mayor o menor. Entrena input, la conversión con int, la comparación y un bucle while. El reto extra es un contador de intentos y un límite de siete.

Su error habitual enseña la habilidad clave de toda la lista. La función input siempre devuelve una cadena, así que compararla con un número falla, y escribir una palabra donde int espera un número lanza un error. El tutorial oficial muestra la cura: un bucle while True alrededor de un bloque try que convierte la respuesta, con una rama except ValueError que vuelve a preguntar. También explica cómo leer el propio error: la última línea del mensaje dice qué ocurrió y el traceback de la pila que hay encima muestra dónde.

La calculadora de propinas pide la cuenta, un porcentaje y el número de personas, y luego imprime cada parte con una f-string a dos decimales. Hay una sorpresa: la página de funciones integradas señala que round(2.675, 2) da 2.67, no 2.68, porque la mayoría de las fracciones decimales no se pueden guardar exactamente como float. Piedra, papel o tijera añade random.choice y una cadena de ramas if y elif; el reto extra es un marcador al mejor de cinco.

Dados con histograma, cuenta atrás y cuestionario con diccionario: bucles

El simulador de dados lanza dos dados diez mil veces con un bucle for y range, guarda cuántas veces aparece cada suma e imprime un histograma de texto, con una fila de almohadillas por suma. Entrena bucles, listas y conteo. Reto extra: preguntar cuántos dados y lanzamientos. El error habitual es una lista desplazada en uno que no tiene hueco para la suma más alta.

La cuenta atrás imprime el tiempo restante una vez por segundo con time.sleep. La documentación del módulo time advierte que la pausa puede ser más larga de lo pedido en una cantidad arbitraria, así que una cuenta atrás larga que solo duerme se irá atrasando. El reto extra lo corrige: guarda un valor inicial de time.monotonic, un reloj que según la documentación no puede retroceder, y calcula el tiempo restante a partir de él en cada vuelta.

El cuestionario guarda las preguntas como claves de un diccionario y las respuestas como valores, recorre los pares, compara las respuestas tras aplicar lower y strip e imprime la puntuación. Es el primer proyecto con datos y lógica por separado. Reto extra: baraja el orden de las preguntas con random.shuffle sobre una lista de las claves y guarda la mejor puntuación.

Contador de palabras y conversor de unidades: cadenas, diccionarios y funciones

El contador de palabras lee un archivo de texto e informa de caracteres, palabras, líneas, longitud media de palabra y las diez palabras más frecuentes. Hazlo primero con split y un diccionario y luego con collections.Counter, que la documentación describe como una subclase de dict para contar objetos hashables. Su propio ejemplo halla las diez palabras más comunes de Hamlet pasando el texto a minúsculas, extrayendo las palabras con una expresión regular y llamando a most_common. El error habitual es contar The y the como palabras distintas, algo que evita pasar antes el texto a minúsculas; el reto extra es una lista de palabras cortas que se ignoran.

El conversor de unidades es el proyecto que enseña funciones. Guarda los factores de conversión en un diccionario con el par de unidades como clave, escribe una función que reciba un valor y dos unidades y devuelva el resultado, y deja toda la impresión fuera de ella. Las temperaturas necesitan su propia función, ya que pasar de Celsius a Fahrenheit requiere un desplazamiento además de un factor. Reto extra: un bucle que siga convirtiendo hasta que el usuario escriba quit.

Un generador de contraseñas con secrets en lugar de random

Aquí importa la elección del módulo. La documentación de random lleva una advertencia: sus generadores no deben usarse con fines de seguridad, y remite a secrets. La documentación de secrets explica el motivo: random está pensado para modelado y simulación, no para seguridad ni criptografía, mientras que secrets produce valores criptográficamente fuertes para contraseñas, tokens y datos similares. El módulo forma parte de Python desde la versión 3.6.

La construcción sigue la receta de esa página. Une string.ascii_letters y string.digits en un alfabeto, elige caracteres con secrets.choice dentro de un bucle y únelos en la contraseña. La documentación muestra después una versión más estricta que sigue generando una contraseña de diez caracteres hasta que contiene al menos una minúscula, una mayúscula y tres dígitos. Reto extra: elegir la longitud, añadir string.punctuation e imprimir varias candidatas.

Lista de tareas, control de gastos y agenda de contactos que guardan en archivos

Una lista de tareas en un archivo de texto entrena la apertura, lectura y escritura. El tutorial recomienda la instrucción with para los archivos porque el archivo se cierra bien aunque ocurra una excepción, y detalla los modos: r lee, a añade al final y w borra un archivo existente del mismo nombre. El error habitual: abrir la lista en modo w para añadir una tarea borra las demás. Reto extra: numerar las tareas y eliminar una por su número.

El control de gastos escribe fecha, categoría e importe en un archivo CSV e imprime un total por categoría. La documentación de csv pide abrir los archivos con newline igual a una cadena vacía; sin ello, los saltos de línea dentro de campos entrecomillados se interpretan mal y, en plataformas que terminan las líneas con retorno de carro y salto de línea, se escribe un retorno de carro de más. Usa DictWriter, cuyo argumento fieldnames no es opcional, y llama a writeheader una sola vez. Como el capítulo del tutorial sobre coma flotante remite el trabajo contable al módulo decimal, usa Decimal para los importes como reto extra.

La agenda de contactos guarda las personas en un diccionario y lo almacena con json.dump, con indent para que sea legible. La documentación de json avisa de que cada clave se convierte en cadena al salir, así que un diccionario con claves numéricas no vuelve igual al original. Además escapa por defecto las letras no ASCII, de modo que nombres como José solo siguen legibles con ensure_ascii en False. Convertir cada contacto en una clase con sus propios métodos es el reto extra.

Un renombrador de archivos con pathlib y los hábitos que sostienen un proyecto

El renombrador de archivos da a una carpeta de fotos o escaneos nombres como holiday-001.jpg. Usa pathlib: Path.iterdir lista la carpeta, Path.suffix da la extensión y with_suffix o with_name construyen el nombre. La documentación de pathlib advierte de que iterdir y glob devuelven los archivos en orden arbitrario, así que hay que ordenarlos antes de numerar. También dice que rename reemplaza en silencio un archivo existente en Unix, pero lanza FileExistsError en Windows. Ejecuta cada versión sobre una copia de la carpeta, con un modo de simulación que solo imprima los nombres previstos.

Conviene adoptar desde el primer proyecto algunos hábitos de PEP 8, la guía de estilo de Python: cuatro espacios por nivel de sangría, líneas de 79 caracteres como máximo, funciones y variables en minúsculas con guiones bajos, clases en CapWords e importaciones al principio del archivo. Su razón es que el código se lee mucho más a menudo de lo que se escribe. La página de __main__ de la documentación añade otro hábito: poner el programa en una función main y llamarla bajo la comprobación if __name__, para poder importar el archivo sin ejecutarlo.

Ninguno de estos proyectos necesita un paquete de terceros. Cuando alguno lo pida, la documentación de venv describe cómo crear un entorno en la carpeta del proyecto con python -m venv .venv, activarlo y dejarlo fuera del control de versiones, anotando los paquetes en requirements.txt. Subir los proyectos terminados a GitHub es buena práctica de commits y readmes; GitHub Docs explica que un archivo .gitignore en la raíz del repositorio indica a Git qué omitir y que GitHub mantiene una lista pública de plantillas recomendadas.

Qué practicar por tu cuenta y qué añade el curso gratuito de Python

Por tu cuenta, esta semana, elige un proyecto de cada uno de los tres primeros grupos y termínalos en orden, una tarde para cada uno. Lee cada traceback desde la última línea hacia arriba antes de buscarlo y anota cada solución en un archivo de notas. La guía para principiantes de la wiki de Python enlaza más programas de ejemplo del mismo nivel.

Un curso estructurado aporta orden y comprobación. El curso gratuito de Python de VITON13 SCHOOL tiene 16 lecciones que se ejecutan en el navegador, sin instalar nada: primer programa, variables, números, cadenas y f-strings, if y elif, listas, bucles for y while, funciones, diccionarios, tuplas y conjuntos, comprensiones de listas, try y except, clases, módulos y un proyecto final de estadísticas de texto. Cada lección da un ejemplo, pide escribir código, muestra el resultado al instante y comprueba el ejercicio. Esas lecciones cubren las ideas de los tres primeros grupos de proyectos de python para principiantes, y el proyecto final es la misma idea que el contador de palabras; los archivos vienen de los proyectos y la documentación.

Lista práctica

  • Escribe en tres frases la versión más pequeña que funcione de tu proyecto antes de abrir el editor.
  • Envuelve cada llamada a int(input()) en un bloque try con una rama except ValueError que vuelva a preguntar.
  • Usa secrets.choice, nunca random, para todo lo que vaya a servir de contraseña o de token.
  • Abre los CSV con newline igual a cadena vacía y nunca abras en modo w una lista a la que estás añadiendo.
  • Copia la carpeta antes de ejecutar un renombrador y haz primero una simulación que solo imprima los nombres nuevos.

Preguntas frecuentes

¿Cuál debería ser mi primer proyecto en Python?

Un juego de adivinar el número. Solo necesita input, int, if, un bucle while y una función del módulo random, cabe en una tarde, y su trampa principal, una palabra donde se esperaba un número, enseña try y except y a leer un traceback.

¿Qué dificultad tienen estos proyectos para un principiante total en Python?

El primer grupo solo requiere lo básico de los capítulos iniciales del tutorial oficial. La dificultad crece con cada grupo porque cada uno añade una sola idea nueva, así que quien los termina en orden nunca se topa con dos cosas desconocidas en el mismo programa.

¿Qué ejercicios de Python para empezar resultan más útiles después?

El control de gastos y el renombrador de archivos. Uno te da un archivo CSV que puedes abrir en una hoja de cálculo; el otro ordena carpetas reales de fotos o escaneos. Ambos merecen conservarse, siempre que el renombrador se pruebe en copias y tenga un modo de simulación.

¿Hace falta instalar paquetes o crear un entorno virtual para estos proyectos?

No. Los trece usan solo la biblioteca estándar que viene con Python. Un entorno virtual resulta útil el día en que un proyecto necesita un paquete de terceros; la documentación de venv explica cómo crearlo dentro de la carpeta del proyecto y dejarlo fuera de Git.

¿Por qué mi generador de contraseñas en Python necesita el módulo secrets?

Porque la documentación de Python dice que el módulo random está hecho para modelado y simulación y no debe usarse para seguridad. El módulo secrets produce elecciones criptográficamente fuertes y su documentación incluye una receta lista para una contraseña alfanumérica.