Este no es el resumen de ventas. Es el contenido completo, sin filtros.
No estudias Python en abstracto. Construyes MovieTracker desde el primer día. Cada módulo añade una capa real.
Variables, condiciones, input() del usuario. La app ya funciona desde el primer día.
# MovieTracker v0.1 — Módulo 1
titulo = input("Título de la película: ")
rating = float(input("Rating (0-10): "))
if rating >= 9.0:
clasificacion = "Obra maestra"
elif rating >= 7.0:
clasificacion = "Muy buena"
else:
clasificacion = "Regular"
print(f"{titulo}: {clasificacion}")
Listas, diccionarios, funciones con validación. La app ya gestiona una colección real.
# MovieTracker v2.0 — Módulo 3
def validate_rating(rating):
"""Valida que el rating esté entre 0 y 10."""
return 0 <= rating <= 10
def add_movie(movies, titulo, year, rating):
"""Agrega una película validada a la colección."""
if validate_rating(rating):
movies.append({"titulo": titulo, "year": year, "rating": rating})
return True
return False
Archivos JSON y base de datos real. Los datos persisten entre ejecuciones.
# MovieTracker v3.0 — Módulo 4
import sqlite3, json
conn = sqlite3.connect("movietracker.db")
cursor = conn.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS peliculas (
id INTEGER PRIMARY KEY AUTOINCREMENT,
titulo TEXT NOT NULL,
year INTEGER,
rating REAL
)
""")
conn.commit()
Clases, herencia, excepciones. El código se vuelve reutilizable y profesional.
# MovieTracker v4.0 — Módulo 5
class Movie:
def __init__(self, title, year, rating, director):
self.title = title
self.rating = rating
self.added_at = datetime.now()
def classify(self):
if self.rating >= 9.0:
return "🌟 Masterpiece"
elif self.rating >= 8.0:
return "⭐ Excellent"
return "👍 Good"
def __str__(self):
return f"{self.title} ({self.year}) — {self.rating}/10"
Flask, JWT, pytest, organización profesional. La app ya tiene API.
# MovieTracker v5.5 — Módulo 8
from flask import Flask, jsonify, request
app = Flask(__name__)
@app.get("/peliculas")
def listar():
return jsonify(peliculas), 200
@app.post("/peliculas")
def agregar():
data = request.get_json()
peliculas.append(data)
return jsonify(data), 201
@app.delete("/peliculas/<int:pelicula_id>")
def eliminar(pelicula_id):
return jsonify({"deleted": pelicula_id}), 200
DigitalOcean, Gunicorn, Nginx. Tu proyecto real accesible en internet.
# gunicorn_config.py — Módulo 10
import os
bind = "0.0.0.0:8000"
workers = (2 * os.cpu_count()) + 1
timeout = 120
# $ gunicorn app:app --config gunicorn_config.py
# → MovieTracker en https://tudominio.com ✓
Con las horas reales de vídeo de cada módulo y lo que construyes en él.
# Tu primer Python
print("Hola, mundo")
print("Empieza MovieTracker")
type()input()if/elif/elsetitulo = input("Título: ")
rating = float(input("Rating: "))
print(f"{titulo}: {rating}/10")
for y whilepeliculas = []
for p in peliculas:
if p["rating"] >= 8:
print(p["titulo"])
def, parámetros, valores por defectoreturn, scope, funciones anidadasdef add_movie(movies, titulo, rating):
"""Agrega película si el rating es válido."""
if 0 <= rating <= 10:
movies.append({"titulo": titulo, "rating": rating})
open(), context managerssqlite3with open("datos.json", "w") as f:
json.dump(peliculas, f, indent=2)
__init__, atributos y métodosclass Movie:
def __init__(self, titulo, year, rating):
self.titulo = titulo
self.rating = rating
try/except/finally: capturar erroresraise: lanzar excepciones propiasclass InvalidRatingError(ValueError):
pass
try:
movie.set_rating(11)
except InvalidRatingError as e:
print(e)
import, módulos propios, __init__.pyvenv# movietracker/models.py
from .database import db
from .validators import validate_rating
request, jsonify, blueprints@app.post("/peliculas")
def agregar():
data = request.get_json()
return jsonify(data), 201
requestspytest y fixturesdef test_agregar_pelicula(client):
resp = client.post("/peliculas", json={"titulo": "Oppenheimer"})
assert resp.status_code == 201
# $ gunicorn app:app --config gunicorn_config.py
bind = "0.0.0.0:8000"
workers = (2 * os.cpu_count()) + 1
# MovieTracker v1.0 — En producción
# https://tudominio.com ✓
El código lo aprendes haciéndolo, no mirándolo.
Problemas con solución incluida para practicar inmediatamente después de cada lección. Haz, falla, corrige y entiende.
Preguntas de opción múltiple al final de cada módulo para consolidar los conceptos clave antes de avanzar.
Ejercicios adicionales para los que quieren ir más lejos. Opcionales, pero los que los hacen notan la diferencia.
Los módulos 1 al 6 están disponibles inmediatamente al entrar. Los módulos 7 al 11 se desbloquean progresivamente (drip feed) según avanzas, para no agobiarte con demasiado material de golpe. El ritmo está diseñado para que llegues a cada módulo cuando de verdad lo necesitas.
Con 2-3 horas semanales completas el curso en 4-5 meses. No hay fechas límite: el acceso es de por vida. Si tienes una semana de locura, no pasa nada. Si tienes tiempo de sobra, puedes ir más rápido.
Cero. El módulo 0 parte de instalar Python y PyCharm desde una máquina vacía. Si ya sabes algo de programación, avanzarás más rápido en los primeros módulos, pero el proyecto MovieTracker te mantendrá ocupado desde el principio.
Si lo que ves te convence, entrar es sencillo.
Sin suscripción. Sin cargos ocultos.
Si en 14 días no es lo que esperabas, te devuelvo el dinero.