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
- Descarga el instalador oficial para Windows.
- Ábrelo y marca Add Python to PATH antes de instalar.
- Completa la instalación y abre PowerShell o Símbolo del sistema.
- 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:
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"
miNombre = "Ana"
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))
print(disponible)
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.
| Operador | Significado | Ejemplo | Resultado |
|---|
| + | Suma o unión | 10 + 5 | 15 |
| - | Resta | 10 - 5 | 5 |
| * | Multiplicación | 10 * 5 | 50 |
| / | División decimal | 10 / 3 | 3.333... |
| // | División entera | 10 // 3 | 3 |
| % | Residuo | 10 % 3 | 1 |
| ** | Potencia | 2 ** 3 | 8 |
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)
Comparaciones
Los operadores ==, !=, >, <, >= y <= devuelven True o False. Atención: = asigna, mientras == compara.
edad = 20
es_mayor = edad >= 18
print(es_mayor)
print(edad == 18)
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)
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) 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)
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
.venv\Scripts\activate
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ónConsulta 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