PYTHON · DE CERO A INTERMEDIO

Aprende Python construyendo, no memorizando.

Una guía completa en español para entender la sintaxis, practicar cada concepto y terminar con un proyecto de gestión de estudiantes que reúne lo aprendido.

Sin registroEjemplos ejecutablesFuentes oficiales

MAPA DEL APRENDIZAJE

De tu primer print() a un programa modular.

01
Sintaxis
02
Datos
03
Funciones
04
Proyecto

Avanza en orden, vuelve a las secciones y marca tu progreso en este dispositivo.

Espacio publicitario

INTRODUCCIÓN

¿Qué es Python y por qué aprenderlo?

Python es un lenguaje de programación interpretado y de propósito general. En términos prácticos, es una forma de escribir instrucciones que una computadora puede ejecutar para transformar datos, automatizar tareas y crear herramientas. Su sintaxis suele parecerse más a una explicación ordenada que a una sucesión de símbolos, por lo que permite concentrarse pronto en la lógica del problema.

Python aparece en automatización, análisis de datos, ciencia, educación, servicios web, pruebas de software e inteligencia artificial. Eso no significa que sea la solución para todo: cada campo tiene herramientas propias y cada empleo exige habilidades adicionales. Sí significa que los fundamentos que aprenderás aquí pueden servir como base para varias rutas.

La documentación oficial describe Python como un lenguaje de alto nivel, con estructuras de datos eficientes y un enfoque práctico para el desarrollo rápido. Esta página complementa esa documentación con explicaciones en español, ejemplos pequeños y un recorrido para quien todavía no ha programado.

Tu idea → instrucciones → Python interpreta → resultado

Tiempo recomendado: estudia una sección, escribe el ejemplo a mano, cambia un dato y observa qué ocurre. La lectura abre el camino; la práctica convierte el concepto en una habilidad.

GUÍA COMPLETA

La ruta, sección por sección

Usa el índice para saltar, pero intenta seguir el orden la primera vez.

0. Instalación y entorno de trabajo

Antes de escribir programas necesitas un intérprete: el software que lee tu archivo de Python y ejecuta sus instrucciones. Descarga Python desde python.org, no desde una página de terceros. La versión actual puede cambiar; para aprender, usa una versión reciente de Python 3 y evita Python 2, que ya no recibe mantenimiento.

Instalar en Windows

  1. Descarga el instalador oficial para Windows.
  2. Ábrelo y marca Add Python to PATH antes de instalar.
  3. Completa la instalación y abre PowerShell o Símbolo del sistema.
  4. Comprueba el resultado con python --version. Si Windows usa el lanzador, prueba py --version.

Instalar en macOS o Linux

En macOS puedes instalar Python desde el instalador oficial o un gestor de paquetes. En Linux revisa el gestor de tu distribución y confirma el comando disponible. La documentación de configuración y uso de Python explica diferencias entre plataformas.

Crea una carpeta llamada aprendizaje-python. Dentro crea un archivo hola.py con este contenido:

# mi primer programa
print("¡Hola, soy programador!")

Guarda el archivo y ejecútalo desde esa carpeta con python hola.py. Si ves el saludo, ya completaste el primer ciclo: escribiste, guardaste y ejecutaste código.

Entorno recomendado: VS Code es un editor flexible; PyCharm Community ofrece una experiencia más enfocada en Python; IDLE viene incluido con Python. La herramienta importa menos que poder ver el código, la terminal y los errores.

1. Variables, nombres y tipos de datos

Una variable es un nombre asociado con un valor. La puedes imaginar como una caja con etiqueta: la etiqueta permite recuperar lo que guardaste, y el valor puede cambiar durante el programa. En Python la asignación usa un solo signo igual:

edad = 25
nombre = "Carlos"
precio = 19.99
activo = True

El código anterior crea cuatro variables. edad contiene un entero, nombre una cadena de texto, precio un número decimal y activo un booleano. Python determina el tipo a partir del valor, pero puedes comprobarlo con type().

Reglas para nombres

Un nombre puede contener letras, números y guiones bajos, pero no debe comenzar con un número ni usar espacios. Python distingue mayúsculas y minúsculas: nombre y Nombre son nombres diferentes. La convención más común es snake_case, por ejemplo precio_final o cantidad_productos.

mi_nombre = "Ana"      # recomendable
miNombre = "Ana"       # válido, menos idiomático
# mi-nombre = "Ana"     # error: el guion es operador

Tipos básicos

int representa enteros; float, decimales; str, texto; bool, verdadero o falso. También existe None, que expresa ausencia de valor. Cada tipo admite operaciones distintas: puedes sumar enteros, unir textos con ciertas reglas y evaluar booleanos en condiciones.

cantidad = 4
precio = 12.5
producto = "Cuaderno"
disponible = cantidad > 0

print(type(cantidad))    # int
print(disponible)        # True

Conversión de tipos

La función input() siempre devuelve texto. Si esperas un número, conviértelo de forma explícita. int("25") crea un entero, float("3.14") un decimal y str(25) texto. La conversión puede fallar si el valor no tiene el formato esperado, por eso más adelante aprenderás a manejar excepciones.

edad_texto = input("¿Cuántos años tienes? ")
edad = int(edad_texto)
print(f"El próximo año tendrás {edad + 1}.")

La letra f delante de la cadena permite insertar expresiones entre llaves. Esto se llama f-string y es una de las formas más claras de construir mensajes.

2. Operadores y expresiones

Los operadores son símbolos o palabras que combinan valores. Una expresión es una parte de código que produce un resultado, como precio * cantidad o edad >= 18. Entender el tipo de resultado es tan importante como memorizar el símbolo.

OperadorSignificadoEjemploResultado
+Suma o unión10 + 515
-Resta10 - 55
*Multiplicación10 * 550
/División decimal10 / 33.333...
//División entera10 // 33
%Residuo10 % 31
**Potencia2 ** 38

El módulo es útil para saber si un número es par: si numero % 2 == 0, no queda residuo. La división entre cero produce un error, no un resultado especial.

precio = 100
descuento = precio * 0.20
precio_final = precio - descuento
print(precio_final)  # 80.0

Comparaciones

Los operadores ==, !=, >, <, >= y <= devuelven True o False. Atención: = asigna, mientras == compara.

edad = 20
es_mayor = edad >= 18
print(es_mayor)       # True
print(edad == 18)     # False

Lógica booleana

and exige que ambas condiciones sean verdaderas; or necesita al menos una; not invierte el resultado. Puedes combinarlos para expresar reglas de negocio, permisos o validaciones.

tiene_edad = edad >= 18
tiene_entrada = True
puede_entrar = tiene_edad and tiene_entrada
fin_de_semana = True
feriado = False
descanso = fin_de_semana or feriado

Cuando una expresión crece, usa paréntesis para hacer visible la intención. La claridad evita errores que el intérprete no necesariamente puede detectar.

3. Control de flujo: decisiones y repeticiones

El control de flujo decide qué instrucciones se ejecutan y cuántas veces. Python usa dos puntos y sangría para delimitar bloques. La sangría no es decoración: forma parte de la estructura del programa. Usa cuatro espacios por nivel y no mezcles tabuladores con espacios.

if, elif y else

nota = 85

if nota >= 90:
    resultado = "Excelente"
elif nota >= 80:
    resultado = "Muy bien"
elif nota >= 70:
    resultado = "Bien"
else:
    resultado = "Necesita practicar"

print(resultado)

Python revisa las condiciones en orden y ejecuta el primer bloque verdadero. Si una condición general aparece antes de una específica, puede impedir que se alcance la segunda. Diseña las reglas de arriba hacia abajo: primero los casos más restrictivos y después los generales.

Bucle for

Usa for para recorrer una colección o repetir un número conocido de veces. range(1, 4) produce 1, 2 y 3; el límite final no se incluye.

for numero in range(1, 4):
    print(numero)

productos = ["teclado", "mouse", "monitor"]
for producto in productos:
    print(f"Producto: {producto}")

Bucle while

while repite mientras una condición sea verdadera. Debes modificar algún dato dentro del bloque para que eventualmente deje de cumplirse.

intentos = 3
while intentos > 0:
    print(f"Quedan {intentos} intentos")
    intentos -= 1
print("Fin")

Un bucle infinito puede congelar el programa. Si necesitas salir antes, usa break; si deseas saltar a la siguiente vuelta, usa continue. Úsalos con una explicación, porque demasiados saltos vuelven difícil seguir el flujo.

for numero in range(1, 8):
    if numero == 4:
        continue
    if numero == 6:
        break
    print(numero)  # 1, 2, 3, 5

4. Estructuras de datos

Las estructuras de datos son contenedores para organizar múltiples valores. Elegir la estructura adecuada hace que el código exprese mejor la intención.

Listas

Una lista conserva el orden y puede modificarse. Sus índices empiezan en cero. append() añade al final, remove() elimina un valor y len() cuenta elementos.

frutas = ["manzana", "plátano", "naranja"]
print(frutas[0])
print(frutas[-1])
frutas.append("fresa")
for fruta in frutas:
    print(fruta)

Para buscar por posición usa un índice. Para buscar por pertenencia, usa in: "manzana" in frutas. Si el índice puede no existir, valida el tamaño o elige una estrategia que no dependa de una posición fija.

Diccionarios

Un diccionario guarda pares clave-valor. Es ideal cuando quieres describir una entidad por nombres en lugar de posiciones.

persona = {
    "nombre": "Carlos",
    "edad": 28,
    "activo": True
}
print(persona["nombre"])
persona["ciudad"] = "Puebla"
for clave, valor in persona.items():
    print(f"{clave}: {valor}")

persona["telefono"] produce un error si la clave no existe. persona.get("telefono", "No indicado") permite ofrecer un valor alternativo. Esta diferencia es útil al procesar datos incompletos.

Tuplas y conjuntos

Una tupla se parece a una lista, pero no se modifica después de crearla. Puede representar coordenadas, configuraciones o un resultado fijo. Un conjunto elimina duplicados y permite operaciones como unión e intersección.

coordenadas = (19.43, -99.13)
colores = {"azul", "verde", "azul"}
print(coordenadas)
print(colores)  # azul aparece una vez

Comprensiones

Una comprensión construye una colección con una expresión y un recorrido. Es compacta, pero no la uses si sacrifica claridad.

cuadrados = [numero ** 2 for numero in range(1, 6)]
pares = [numero for numero in range(10) if numero % 2 == 0]
print(cuadrados)  # [1, 4, 9, 16, 25]

5. Funciones: dividir un problema en piezas

Una función es un bloque reutilizable que recibe datos, realiza una tarea y puede devolver un resultado. Las funciones reducen repetición y permiten probar una parte del programa sin ejecutar todo.

def saludar(nombre):
    return f"Hola, {nombre}"

mensaje = saludar("Ana")
print(mensaje)

def inicia la definición; el nombre debe describir la acción; los parámetros son entradas; return entrega el resultado. Una función que solo imprime puede ser útil, pero una que devuelve datos suele ser más reutilizable.

Parámetros y valores por defecto

def calcular_descuento(precio, porcentaje=10):
    descuento = precio * porcentaje / 100
    return precio - descuento

print(calcular_descuento(200))
print(calcular_descuento(200, 25))

El valor por defecto se usa cuando no envías ese argumento. Los parámetros obligatorios deben colocarse antes de los opcionales. Evita usar listas mutables como valores por defecto; crea la lista dentro de la función cuando sea necesario.

Alcance y nombres

Una variable creada dentro de una función normalmente existe dentro de esa función. Esto ayuda a evitar que cada parte del programa cambie accidentalmente el estado de otra. Pasa datos como parámetros y devuelve resultados en lugar de depender de variables globales.

Documentar una función

def promedio(valores):
    """Devuelve el promedio de una lista no vacía."""
    return sum(valores) / len(valores)

print(promedio([8, 9, 10]))

Una función debería tener una responsabilidad clara. Si una función calcula, imprime, guarda archivos y envía correos al mismo tiempo, será difícil probarla. Divide responsabilidades y usa nombres que expresen qué ocurre.

6. Programación orientada a objetos

La programación orientada a objetos organiza el código alrededor de objetos que combinan datos y comportamientos. Una clase es una plantilla; un objeto es una instancia concreta. La analogía de una receta ayuda: la clase describe cómo preparar algo y cada objeto es una preparación particular.

class Persona:
    def __init__(self, nombre, edad):
        self.nombre = nombre
        self.edad = edad

    def saludar(self):
        return f"Hola, soy {self.nombre}"

persona = Persona("María", 25)
print(persona.saludar())

__init__ se ejecuta al crear el objeto. self representa la instancia actual. self.nombre guarda una propiedad y saludar es un método que utiliza esa propiedad.

Cuándo usar una clase

Una clase tiene sentido cuando varias entidades comparten estructura y acciones: estudiantes, productos, cuentas o tareas. Si solo necesitas agrupar dos valores una vez, una función o un diccionario puede ser más directo. La orientación a objetos es una herramienta, no una obligación para cada programa.

class Estudiante:
    def __init__(self, nombre, calificacion):
        self.nombre = nombre
        self.calificacion = calificacion

    def aprobado(self):
        return self.calificacion >= 60

    def resumen(self):
        estado = "Aprobado" if self.aprobado() else "Pendiente"
        return f"{self.nombre}: {estado}"

alumno = Estudiante("Luis", 86)
print(alumno.resumen())

La expresión condicional dentro de resumen es una forma breve de elegir entre dos resultados. Si una clase crece demasiado, separa responsabilidades o crea otras clases relacionadas.

7. Manejo de errores y depuración

Un error no es solo un obstáculo: es información sobre lo que el programa no pudo asumir. Python comunica problemas mediante excepciones. Leer el tipo y la línea del mensaje es una habilidad central.

Errores frecuentes

  • SyntaxError: la estructura escrita no cumple la sintaxis.
  • NameError: usaste un nombre que no existe.
  • TypeError: una operación no es compatible con el tipo.
  • ValueError: el tipo es correcto, pero el valor no tiene formato válido.
  • IndexError: intentaste acceder a una posición inexistente.
  • KeyError: solicitaste una clave ausente en un diccionario.

try y except

try:
    edad = int(input("Edad: "))
    print(f"Tienes {edad} años")
except ValueError:
    print("Escribe un número entero.")

Captura excepciones concretas. Un except Exception demasiado amplio puede ocultar fallos que sí necesitas corregir. else se ejecuta si no ocurrió una excepción y finally se ejecuta siempre, por ejemplo para cerrar un recurso.

Archivos y context managers

try:
    with open("datos.txt", "r", encoding="utf-8") as archivo:
        contenido = archivo.read()
except FileNotFoundError:
    print("El archivo todavía no existe.")

with se encarga de liberar el archivo al salir del bloque, incluso si sucede un error. Para guardar texto usa el modo "w" con cuidado porque reemplaza el contenido; "a" agrega al final.

Para depurar, reduce el problema a un caso pequeño, imprime valores intermedios, revisa tipos con type() y prueba una función con entradas conocidas. La meta no es llenar el programa de impresiones permanentes, sino observar una hipótesis y después quitar o sustituir esas comprobaciones.

8. Librerías, módulos y pip

Un módulo es un archivo de Python que puedes importar. Una librería o paquete reúne código reutilizable. Python incluye una biblioteca estándar amplia; además, existe un ecosistema de paquetes externos instalables con pip.

Módulos estándar

import math
import random

print(math.sqrt(16))
print(math.ceil(3.2))
print(random.randint(1, 10))

math ofrece operaciones matemáticas y random genera valores pseudoaleatorios. Para fechas puedes usar datetime; para trabajar con rutas, pathlib; para datos en formato JSON, json.

Instalar paquetes externos

Desde una terminal puedes instalar un paquete con python -m pip install nombre. En Windows también es común py -m pip install nombre. No copies comandos de sitios desconocidos: revisa el nombre, la documentación, la licencia y el mantenimiento del paquete.

python -m venv .venv
# Windows
.venv\Scripts\activate
# macOS/Linux
source .venv/bin/activate
python -m pip install requests

Un entorno virtual separa las dependencias del proyecto de las del sistema. Para proyectos reales, registra dependencias y evita trabajar siempre como administrador. La Python Packaging User Guide explica la instalación de paquetes.

Requests y datos externos

Un paquete como Requests puede enviar solicitudes HTTP, pero debes tratar las respuestas como datos externos: valida el estado, controla tiempos de espera y no expongas claves secretas. En una página estática como esta no ejecutamos solicitudes de red desde Python; aquí el objetivo es entender el papel de una librería.

Espacio publicitario

9. Proyecto integrador: gestión de estudiantes

Este proyecto reúne variables, listas, diccionarios, funciones, condicionales, bucles y una clase. No pretende ser un sistema escolar de producción: es un laboratorio para observar cómo las piezas se combinan. Copia el código en un archivo llamado estudiantes.py y ejecútalo en tu computadora.

class Estudiante:
    def __init__(self, nombre, carrera, calificacion):
        self.nombre = nombre
        self.carrera = carrera
        self.calificacion = calificacion

    def aprobado(self):
        return self.calificacion >= 60

    def resumen(self):
        estado = "Aprobado" if self.aprobado() else "Reprobado"
        return f"{self.nombre} - {self.carrera} - {self.calificacion} ({estado})"

estudiantes = []

def agregar_estudiante():
    nombre = input("Nombre: ").strip()
    carrera = input("Carrera: ").strip()
    try:
        calificacion = float(input("Calificación: "))
    except ValueError:
        print("La calificación debe ser numérica.")
        return
    estudiantes.append(Estudiante(nombre, carrera, calificacion))
    print("Estudiante agregado.")

def listar_estudiantes():
    if not estudiantes:
        print("No hay estudiantes registrados.")
        return
    for estudiante in estudiantes:
        print(estudiante.resumen())

def mostrar_promedio():
    if not estudiantes:
        print("No hay calificaciones.")
        return
    promedio = sum(e.calificacion for e in estudiantes) / len(estudiantes)
    print(f"Promedio: {promedio:.2f}")

def menu():
    while True:
        print("\n1. Agregar\n2. Listar\n3. Promedio\n4. Salir")
        opcion = input("Elige una opción: ")
        if opcion == "1":
            agregar_estudiante()
        elif opcion == "2":
            listar_estudiantes()
        elif opcion == "3":
            mostrar_promedio()
        elif opcion == "4":
            break
        else:
            print("Opción no válida.")

if __name__ == "__main__":
    menu()

Cómo leer el proyecto

La clase representa una entidad y sus reglas. La lista conserva los objetos. Las funciones separan acciones del menú. El bucle while mantiene el programa abierto y los condicionales deciden qué acción ejecutar. La comprensión sum(e.calificacion for e in estudiantes) recorre los objetos para calcular un total.

Para mejorar el proyecto, agrega búsqueda por nombre, validación de calificaciones entre 0 y 100, eliminación de registros y persistencia en JSON. Cada mejora debe ser pequeña: primero escribe una prueba manual, luego modifica una parte y finalmente comprueba que las funciones existentes siguen funcionando.

10. Preguntas frecuentes sobre aprender Python

¿Cuánto tiempo tarda aprender Python a nivel básico?

No existe un plazo universal. Una persona que practica entre 30 y 90 minutos la mayoría de los días puede recorrer fundamentos en varias semanas, pero comprenderlos de verdad requiere resolver problemas y revisar errores. El nivel intermedio aparece cuando puedes dividir una necesidad en funciones, elegir estructuras y construir un proyecto sin copiar cada línea.

¿Python es adecuado para un principiante absoluto?

Sí, pero “adecuado” no significa automático. La sintaxis puede ser accesible, aunque tendrás que entender variables, condiciones, bucles y datos. Empieza con programas pequeños y escribe cambios propios; leer muchos ejemplos sin modificarlos produce una sensación de avance que no siempre se refleja al programar.

¿Necesito matemáticas avanzadas?

No para la ruta básica. La aritmética y la lógica son suficientes para comenzar. Si eliges ciencia de datos, gráficos, simulaciones o aprendizaje automático, aprenderás matemáticas específicas a medida que las necesites.

¿Python es gratis?

El lenguaje y su implementación oficial se distribuyen como software libre. Descarga Python desde python.org y revisa las licencias de los paquetes externos que utilices. “Gratis” no significa que todo paquete o servicio relacionado tenga las mismas condiciones.

¿Qué diferencia hay entre Python 2 y Python 3?

Python 2 está fuera de soporte. Para proyectos nuevos usa Python 3 y consulta documentación actual. Si encuentras un tutorial antiguo, revisa sus ejemplos antes de ejecutarlos porque puede usar sintaxis o librerías obsoletas.

¿Es mejor usar VS Code, PyCharm o la terminal?

La terminal muestra con claridad qué comando se ejecuta y qué error aparece. VS Code ofrece extensiones y flexibilidad; PyCharm Community integra herramientas enfocadas en Python. Aprende a ejecutar desde terminal aunque uses un editor: esa habilidad te ayudará cuando trabajes con servidores o automatizaciones.

¿Qué hago cuando mi código falla?

Lee la última línea del error, ubica el archivo y la línea indicados, reproduce el problema con el caso más pequeño posible y revisa los tipos de datos. Agrega impresiones temporales o usa un depurador. No cambies cinco cosas a la vez: si no sabrás cuál modificación resolvió o creó el problema.

¿Dónde practico después de leer esta guía?

Construye proyectos pequeños: un lector de archivos CSV, un organizador de carpetas, un juego de terminal, una API o una aplicación web. Plataformas de ejercicios como Exercism, Codewars o HackerRank pueden aportar problemas, pero tu propio proyecto te obliga a tomar decisiones de estructura.

11. Siguiente paso: especialización

Después de dominar esta guía, no necesitas aprender todas las áreas de Python. Elige una ruta según lo que quieras construir. Para web, explora Flask, Django o FastAPI. Para datos, estudia NumPy, pandas y Matplotlib. Para automatización, combina pathlib, subprocess y herramientas de navegador con criterios de seguridad. Para inteligencia artificial, aprende primero manipulación de datos y evaluación de resultados antes de saltar a un modelo.

Fundamentos → proyectos pequeños → archivos y APIs → pruebas → especialización
                         ↘ Web: Flask / Django / FastAPI
                         ↘ Datos: pandas / NumPy / Matplotlib
                         ↘ Automatización: pathlib / subprocess
                         ↘ IA: datos / modelos / evaluación

Consulta la documentación oficial de Python, el tutorial oficial y las guías de empaquetado antes de confiar en un fragmento encontrado en redes sociales. Los recursos externos pueden cambiar; las fuentes primarias explican qué hace realmente cada herramienta.

Tu reto de hoy

Crea una carpeta, instala Python, ejecuta print("Hola") y cambia el mensaje. Después modifica el proyecto integrador para agregar una función que busque estudiantes por nombre.

Practicar ahora

LABORATORIO DEL NAVEGADOR

Prueba ejemplos sin instalar nada

Este laboratorio simula los ejemplos educativos incluidos. Para ejecutar Python real, usa el archivo local y la instalación oficial.

Salida
Presiona “Ejecutar ejemplo” para ver el resultado.

La consola usa ejemplos predefinidos para funcionar sin dependencias externas.

REPASO RÁPIDO

¿Qué estructura usarías?

Quieres guardar productos por código y recuperar sus datos por nombre. ¿Qué estructura representa mejor cada producto?