Programación Orientada a Objetos

Ing. Bernardo Prado · UTH 2026-2 · DSM3

📘 Unidad 1 🐍 Python 3 💻 VS Code

🏗️ Práctica 1 – Introducción a la Programación Orientada a Objetos

Aprenderás qué es la POO, para qué sirve, y construirás tu primera clase en Python desde cero, línea por línea. No se asume ningún conocimiento previo.

⏱ 90 minutos aprox. 🎯 Nivel: Principiante 📁 Archivo: sistema_estudiantes.py 🛠 Herramienta: VS Code

🛠️ Sección 0 — Antes de Empezar: Herramientas que Necesitas

Antes de escribir una sola línea de código necesitas tener instalado lo siguiente. Si ya lo tienes, ¡salta directo a la Sección 1!

A
Instalar Python 3

Ve a python.org y descarga la versión más reciente (3.11 o superior). Durante la instalación, en la primera pantalla marca la casilla que dice "Add Python to PATH" antes de hacer clic en "Install Now".

🖼️ Captura: Instalador de Python

Deberías ver una ventana con la casilla "Add Python 3.x to PATH" en la parte inferior. Marca esa casilla antes de continuar.

⚠️ ¡MUY IMPORTANTE! Si no marcas "Add Python to PATH" tendrás que reinstalar Python desde cero. No te saltes ese paso.

Para verificar que quedó bien instalado, abre una terminal (en Windows: tecla Windows + R, escribe cmd, presiona Enter) y escribe:

Terminal / CMD
python --version
✅ Resultado esperado (el número puede variar): Python 3.11.5
B
Instalar Visual Studio Code (VS Code)

Ve a code.visualstudio.com, descarga el instalador para tu sistema operativo e instálalo con los valores predeterminados. VS Code es el editor de código que usaremos durante todo el curso.

🖼️ Captura: Pantalla principal de VS Code (primera vez que lo abres)

Verás una pantalla de bienvenida con fondo oscuro. En el panel izquierdo hay íconos de explorador de archivos, búsqueda, control de versiones, etc.

C
Instalar la extensión de Python en VS Code

Dentro de VS Code, en el panel lateral izquierdo haz clic en el ícono de cuadraditos (Extensiones) o presiona Ctrl + Shift + X. En el buscador escribe Python. La primera opción que aparece es la de Microsoft. Haz clic en Install.

🖼️ Captura: Buscador de extensiones con "Python" de Microsoft

La extensión muestra el logo de Python (serpiente) y el publicador "Microsoft". El botón azul dice "Install".

D
Crear la carpeta de trabajo

Crea una carpeta en tu computadora para guardar todos los proyectos del curso. Por ejemplo: C:\POO_UTH\ o Documentos/POO_UTH/. Luego, dentro de esa carpeta crea una subcarpeta llamada Unidad1.

En VS Code ve a Archivo → Abrir Carpeta y selecciona la carpeta Unidad1 que acabas de crear. Esto es tu área de trabajo para esta práctica.

📖 Sección 1 — ¿Qué es la Programación Orientada a Objetos?

Antes de escribir código, necesitamos entender el por qué. Lee esta sección con calma, es la base de todo.

💡 Idea Principal La Programación Orientada a Objetos (POO) es una forma de organizar tu código. En lugar de escribir instrucciones sueltas, agrupas datos y acciones relacionadas en "paquetes" llamados objetos. Es como organizar cosas de la vida real.

1.1 La analogía del mundo real

Piensa en un estudiante de la UTH. Ese estudiante tiene características:

Y también puede hacer cosas:

En POO, a las características las llamamos atributos, y a las acciones las llamamos métodos. Ambos viven juntos dentro de una clase.

1.2 Clase vs Objeto — La diferencia clave

Concepto ¿Qué es? Ejemplo
Clase Es el molde o plantilla. Define cómo será algo. El plano de una casa
Objeto Es una instancia real creada a partir de la clase. Una casa construida con ese plano
Atributo Una característica o dato que tiene el objeto. El color de la casa, sus metros cuadrados
Método Una acción o comportamiento que puede hacer el objeto. Abrir la puerta, encender la luz
🧠 Regla de Oro Una clase es como un molde de galletas 🍪. El molde no es una galleta, solo define la forma. Cada galleta que haces con ese molde es un objeto. Puedes hacer miles de galletas (objetos) distintas usando el mismo molde (clase).

1.3 El diagrama UML de la clase

UML (Unified Modeling Language) es una forma visual de representar clases antes de escribir código. El diagrama tiene 3 partes:

Estudiante
📋 ATRIBUTOS (datos que tendrá cada estudiante)

nombre : str

matricula : str

carrera : str

promedio : float

⚡ MÉTODOS (acciones que puede hacer)

__init__() → None

mostrar_info() → None

esta_aprobado() → bool

actualizar_promedio(nuevo) → None

✅ Este diagrama es tu guía de construcción Durante toda la práctica vas a construir exactamente esta clase Estudiante en Python, tal como la muestra el diagrama. Al final, tu código reflejará perfectamente este diagrama UML.

🏢 Sección 2 — El Escenario del Proyecto

🏫 Sistema de Registro de Estudiantes — UTH Demo

La coordinación académica de la UTH necesita un programa básico para registrar la información de sus estudiantes de la carrera DSM. El sistema debe poder:

  • Guardar el nombre, matrícula, carrera y promedio de cada estudiante.
  • Mostrar la información completa de un estudiante en pantalla.
  • Determinar si un estudiante está aprobado (promedio ≥ 7.0).
  • Actualizar el promedio de un estudiante cuando sea necesario.

Tu tarea: Construir este sistema usando POO en Python con una clase llamada Estudiante.

Variables y datos que usaremos

Variable / AtributoTipoEjemplo de valor¿Para qué sirve?
nombrestr"Ana López"Nombre completo del estudiante
matriculastr"DSM2024001"Número único que identifica al estudiante
carrerastr"DSM"Carrera en la que está inscrito
promediofloat8.5Promedio de calificaciones (0.0 a 10.0)
MINIMO_APROBATORIOfloat7.0La calificación mínima para estar aprobado

💻 Sección 3 — Crear el Archivo en VS Code

1
Abrir VS Code y crear un nuevo archivo

Con la carpeta Unidad1 abierta en VS Code, haz clic derecho en el explorador de archivos (panel izquierdo) y selecciona "New File" (Nuevo Archivo). Nómbralo:

Nombre del archivo
sistema_estudiantes.py
🖼️ Captura: Cómo crear un nuevo archivo en VS Code

Haz clic derecho en el panel izquierdo → "New File" → escribe el nombre → presiona Enter. El archivo aparecerá en el explorador y se abrirá en el editor central.

⚠️ El nombre del archivo importa El archivo DEBE terminar en .py para que VS Code lo reconozca como Python y lo coloree correctamente. Sin esa extensión, el editor no sabrá que es código Python.
2
Agregar el encabezado del archivo

Lo primero que escribiremos es un comentario explicando qué hace el programa. Los comentarios en Python comienzan con el símbolo # y Python los ignora al ejecutar el código — solo son para que los humanos entiendan qué hace cada parte.

sistema_estudiantes.py — Encabezado
# =====================================================
# Práctica Unidad 1 - Programación Orientada a Objetos
# Asignatura: POO | UTH 2026-2
# Tema: Clases, Objetos, Atributos y Métodos
# Archivo: sistema_estudiantes.py
# =====================================================
💡 ¿Por qué poner este encabezado? Es una buena práctica profesional. Cualquier persona que abra tu archivo sabrá de inmediato de qué trata, a qué materia pertenece y cuál es el tema. En proyectos reales, los desarrolladores siempre documentan sus archivos así.

🏗️ Sección 4 — Construir la Clase Estudiante Paso a Paso

Ahora sí — vamos a escribir código. Cada bloque se explica línea por línea antes de escribirlo.

3
Declarar la clase con la palabra clave class

En Python, para crear una clase se usa la palabra reservada class seguida del nombre de la clase y dos puntos (:). El nombre de la clase, por convención, siempre empieza con Mayúscula (esto se llama PascalCase).

Escribe esto justo debajo del encabezado que ya tienes:

sistema_estudiantes.py

class Estudiante:
    """Clase que representa a un estudiante de la UTH."""
Fragmento de códigoExplicación detallada
class Palabra reservada de Python que le dice: "voy a definir una clase nueva". Es como decir "voy a crear un molde".
Estudiante Es el nombre que le damos a nuestra clase. Empieza con mayúscula por convención. Podrías llamarla de otra forma, pero "Estudiante" es descriptivo.
: Los dos puntos indican que lo que viene a continuación, con sangría (indentación), pertenece a la clase. En Python la sangría (4 espacios o 1 Tab) es OBLIGATORIA.
"""Clase que representa...""" Esto es un docstring (documentación de la clase). Las triples comillas permiten texto en múltiples líneas. Le dice a quien lea el código qué hace esta clase.
⛔ Error muy común: La sangría (indentación) TODO lo que pertenece a la clase DEBE tener 4 espacios de sangría al inicio. Si olvidas la sangría, Python lanzará un error IndentationError. VS Code te ayuda añadiendo la sangría automáticamente al presionar Enter después de los dos puntos.
4
Agregar un atributo de clase: la constante MINIMO_APROBATORIO

Existen dos tipos de atributos: los de clase (compartidos por todos los objetos) y los de instancia (únicos de cada objeto). Aquí agregaremos uno de clase: el mínimo aprobatorio. Como es igual para todos los estudiantes, lo definimos a nivel de clase.

Escribe esto dentro de la clase, con 4 espacios de sangría:

sistema_estudiantes.py
class Estudiante:
    """Clase que representa a un estudiante de la UTH."""

    # Atributo de clase: es igual para todos los objetos Estudiante
    MINIMO_APROBATORIO = 7.0
FragmentoExplicación
MINIMO_APROBATORIO Nombre en MAYÚSCULAS indica que es una constante (valor que no cambia). Es una convención de Python. Este valor es 7.0 para TODOS los estudiantes.
= El operador de asignación. Guarda el valor de la derecha en la variable de la izquierda.
7.0 Un número decimal (tipo float). Usamos 7.0 y no 7 para ser explícitos de que es un número con decimales.
5
El Constructor: el método especial __init__

El método __init__ es especial — Python lo llama automáticamente cada vez que creas un nuevo objeto. Su trabajo es inicializar los atributos de ese objeto particular. Piénsalo como el "nacimiento" del objeto: cuando nace un estudiante, se le asignan sus datos iniciales.

💡 ¿Qué es self? self es una referencia al propio objeto que se está creando. Cuando escribes self.nombre = nombre, le estás diciendo: "guarda el valor del parámetro nombre EN ESTE MISMO OBJETO". Sin self, el dato se perdería al terminar el método.
sistema_estudiantes.py — método __init__
class Estudiante:
    """Clase que representa a un estudiante de la UTH."""

    MINIMO_APROBATORIO = 7.0

    def __init__(self, nombre, matricula, carrera, promedio=0.0):
        """
        Constructor: se ejecuta automáticamente al crear un objeto.
        Parámetros:
            nombre    (str)   → Nombre completo del estudiante
            matricula (str)   → Clave única del estudiante
            carrera   (str)   → Nombre de la carrera
            promedio  (float) → Promedio inicial (por defecto 0.0)
        """
        self.nombre    = nombre      # atributo de instancia
        self.matricula = matricula  # atributo de instancia
        self.carrera   = carrera    # atributo de instancia
        self.promedio  = promedio   # atributo de instancia
FragmentoExplicación detallada
def Palabra reservada para definir una función o método. Siempre va antes del nombre del método.
__init__ Nombre especial del constructor. Los dobles guiones bajos (__) indican que es un método "mágico" (dunder method) que Python reconoce automáticamente.
self Siempre es el PRIMER parámetro de cualquier método de una clase. Representa al objeto actual. Python lo pasa automáticamente — tú no necesitas enviarlo al llamar el método.
nombre, matricula, carrera Parámetros que quien cree el objeto debe proporcionar. Son los datos necesarios para "registrar" a un estudiante.
promedio=0.0 Parámetro con valor por defecto. Si no se proporciona, Python usa 0.0. Esto hace que sea opcional al crear el objeto.
self.nombre = nombre Toma el valor del parámetro nombre y lo guarda como atributo del objeto. A partir de este momento, self.nombre guarda el dato para toda la vida del objeto.
6
Método mostrar_info() — Imprime los datos del estudiante

Este método muestra en pantalla toda la información del estudiante. No recibe parámetros adicionales (aparte de self) porque ya tiene acceso a los atributos del objeto a través de self.

sistema_estudiantes.py — método mostrar_info
    def mostrar_info(self):
        """Imprime en pantalla la información completa del estudiante."""
        print("=" * 40)
        print(f"  FICHA DE ESTUDIANTE")
        print("=" * 40)
        print(f"  Nombre    : {self.nombre}")
        print(f"  Matrícula : {self.matricula}")
        print(f"  Carrera   : {self.carrera}")
        print(f"  Promedio  : {self.promedio:.1f}")
        print("=" * 40)
FragmentoExplicación
def mostrar_info(self): Definimos un método llamado mostrar_info. Sólo recibe self porque no necesita datos externos.
print("=" * 40) Imprime el carácter = repetido 40 veces. Es solo para que la salida se vea bonita y ordenada.
f" Nombre : {self.nombre}" Una f-string (cadena formateada). La f antes de la comilla indica que lo que esté dentro de {} se evaluará como código Python. {self.nombre} se reemplaza con el valor real del atributo.
{self.promedio:.1f} El :.1f es un formato especial que muestra el número con exactamente 1 decimal. Así, 8.5678 se muestra como 8.6.
7
Método esta_aprobado() — Retorna True o False

Este método compara el promedio del estudiante contra el mínimo aprobatorio y devuelve un valor booleano (True si está aprobado, False si no).

sistema_estudiantes.py — método esta_aprobado
    def esta_aprobado(self):
        """
        Retorna True si el promedio es >= al mínimo aprobatorio.
        Retorna False si el estudiante está reprobado.
        """
        return self.promedio >= Estudiante.MINIMO_APROBATORIO
FragmentoExplicación
return Esta palabra hace que el método entregue un valor a quien lo llamó. Es como la respuesta de una pregunta.
self.promedio >= Estudiante.MINIMO_APROBATORIO Compara el promedio del estudiante con el valor 7.0. Si el promedio es mayor o igual a 7.0, la comparación es True; si no, es False. Ese resultado es lo que se retorna.
Estudiante.MINIMO_APROBATORIO Accedemos al atributo de clase usando el nombre de la clase, no self. Aunque también podría usarse self.MINIMO_APROBATORIO, es más claro así.
8
Método actualizar_promedio() — Modifica el promedio

Este método permite cambiar el promedio del estudiante. Incluye validación: el nuevo promedio debe estar entre 0.0 y 10.0.

sistema_estudiantes.py — método actualizar_promedio
    def actualizar_promedio(self, nuevo_promedio):
        """
        Actualiza el promedio del estudiante.
        Parámetro:
            nuevo_promedio (float) → Nuevo valor del promedio (0.0 - 10.0)
        """
        if 0.0 <= nuevo_promedio <= 10.0:
            self.promedio = nuevo_promedio
            print(f"✅ Promedio actualizado a {nuevo_promedio:.1f} para {self.nombre}")
        else:
            print(f"❌ Error: el promedio debe estar entre 0.0 y 10.0")
FragmentoExplicación
nuevo_promedio Parámetro que recibe el método. Quien llame a este método debe proporcionar el nuevo valor del promedio.
if 0.0 <= nuevo_promedio <= 10.0: Validación: verifica que el valor esté en el rango correcto. Python permite encadenar comparaciones así (matemáticamente natural).
self.promedio = nuevo_promedio Si la validación pasa, el atributo promedio del objeto se reemplaza con el nuevo valor.
else: Si la condición del if es falsa (el valor no está en el rango), se ejecuta este bloque alternativo.
9
Método especial __str__() — Representación en texto

El método __str__ es otro método "mágico". Python lo llama automáticamente cuando intentas imprimir un objeto directamente con print(objeto). Debe retornar una cadena de texto.

sistema_estudiantes.py — método __str__
    def __str__(self):
        """Retorna una cadena de texto que representa al estudiante."""
        estado = "✅ Aprobado" if self.esta_aprobado() else "❌ Reprobado"
        return f"[{self.matricula}] {self.nombre} | Promedio: {self.promedio:.1f} | {estado}"
🧠 Operador ternario en Python La línea estado = "✅ Aprobado" if self.esta_aprobado() else "❌ Reprobado" es un operador ternario — una forma compacta de un if/else en una sola línea. Si esta_aprobado() retorna True, estado será "✅ Aprobado"; si retorna False, será "❌ Reprobado".

📋 Sección 5 — Código Completo de la Clase

Aquí está el código completo tal como debería verse tu archivo hasta ahora. Compáralo con lo que tienes y corrígelo si hay diferencias.

sistema_estudiantes.py — Clase completa
# =====================================================
# Práctica Unidad 1 - Programación Orientada a Objetos
# Asignatura: POO | UTH 2026-2
# Tema: Clases, Objetos, Atributos y Métodos
# =====================================================


class Estudiante:
    """Clase que representa a un estudiante de la UTH."""

    # Atributo de clase (compartido por todos los objetos)
    MINIMO_APROBATORIO = 7.0

    def __init__(self, nombre, matricula, carrera, promedio=0.0):
        """Constructor: inicializa los atributos del estudiante."""
        self.nombre    = nombre
        self.matricula = matricula
        self.carrera   = carrera
        self.promedio  = promedio

    def mostrar_info(self):
        """Imprime en pantalla la información completa del estudiante."""
        print("=" * 40)
        print(f"  FICHA DE ESTUDIANTE")
        print("=" * 40)
        print(f"  Nombre    : {self.nombre}")
        print(f"  Matrícula : {self.matricula}")
        print(f"  Carrera   : {self.carrera}")
        print(f"  Promedio  : {self.promedio:.1f}")
        print("=" * 40)

    def esta_aprobado(self):
        """Retorna True si promedio >= mínimo aprobatorio, False si no."""
        return self.promedio >= Estudiante.MINIMO_APROBATORIO

    def actualizar_promedio(self, nuevo_promedio):
        """Actualiza el promedio si el valor está en el rango correcto."""
        if 0.0 <= nuevo_promedio <= 10.0:
            self.promedio = nuevo_promedio
            print(f"✅ Promedio actualizado a {nuevo_promedio:.1f}")
        else:
            print(f"❌ Error: el promedio debe estar entre 0.0 y 10.0")

    def __str__(self):
        """Retorna representación en texto del objeto."""
        estado = "✅ Aprobado" if self.esta_aprobado() else "❌ Reprobado"
        return f"[{self.matricula}] {self.nombre} | Promedio: {self.promedio:.1f} | {estado}"

🧪 Sección 6 — Crear Objetos y Probar el Sistema

Ahora que tenemos la clase, vamos a instanciar (crear) objetos y llamar sus métodos. Escribe este código al final del mismo archivo, fuera de la clase (sin sangría).

10
El bloque if __name__ == "__main__":

Este bloque especial permite que el código de prueba solo se ejecute cuando corres el archivo directamente, y NO cuando lo importas desde otro archivo. Es una buena práctica siempre incluirlo.

sistema_estudiantes.py — Programa principal

# =====================================================
# PROGRAMA PRINCIPAL — Aquí probamos la clase
# Este bloque solo se ejecuta al correr este archivo
# =====================================================
if __name__ == "__main__":

    print("\n🎓 SISTEMA DE REGISTRO DE ESTUDIANTES — UTH")
    print("=" * 50)

    # ── Crear objetos (instanciar la clase) ──
    # Sintaxis: variable = NombreClase(argumentos)
    estudiante1 = Estudiante("Ana López", "DSM2024001", "DSM", 8.5)
    estudiante2 = Estudiante("Carlos Mendoza", "DSM2024002", "DSM", 6.3)
    estudiante3 = Estudiante("Lucia Torres", "TICS2024001", "TICS")

    # ── Mostrar información de cada estudiante ──
    print("\n📋 FICHAS DE ESTUDIANTES:")
    estudiante1.mostrar_info()
    estudiante2.mostrar_info()

    # ── Verificar si están aprobados ──
    print("\n📊 ESTADO ACADÉMICO:")
    for est in [estudiante1, estudiante2, estudiante3]:
        print(est)   # llama a __str__ automáticamente

    # ── Actualizar promedio ──
    print("\n✏️ ACTUALIZAR PROMEDIOS:")
    estudiante3.actualizar_promedio(7.8)   # válido
    estudiante2.actualizar_promedio(11.0)  # inválido — prueba el error

    # ── Estado final ──
    print("\n📊 ESTADO FINAL:")
    for est in [estudiante1, estudiante2, estudiante3]:
        print(est)

    # ── Acceder a atributos directamente ──
    print(f"\n📌 Carrera de {estudiante1.nombre}: {estudiante1.carrera}")
    print(f"📌 Mínimo aprobatorio: {Estudiante.MINIMO_APROBATORIO}")
Línea claveExplicación
estudiante1 = Estudiante("Ana López", ...) Crea un objeto. Python llama automáticamente a __init__ con los argumentos que proporcionas. estudiante1 es la variable que guarda el objeto.
estudiante1.mostrar_info() Llama al método mostrar_info del objeto estudiante1. Nota: NO escribes self al llamarlo — Python lo pasa automáticamente.
for est in [estudiante1, estudiante2, estudiante3]: Recorre una lista de objetos. En cada iteración, est es un objeto diferente.
print(est) Al imprimir un objeto directamente, Python llama automáticamente a su método __str__.

▶️ Sección 7 — Ejecutar el Programa

11
Guardar el archivo

Presiona Ctrl + S para guardar. El punto (•) que aparece en la pestaña del archivo desaparece cuando está guardado.

12
Abrir la terminal integrada de VS Code

Ve al menú Terminal → New Terminal (o presiona Ctrl + ` — el acento grave). Se abrirá una terminal en la parte inferior de VS Code, ya ubicada en tu carpeta de trabajo.

🖼️ Captura: Terminal integrada de VS Code

En la parte inferior aparece una terminal. Deberías ver algo como: PS C:\...\Unidad1> o C:\...\Unidad1>

13
Ejecutar el programa

En la terminal, escribe el siguiente comando y presiona Enter:

Terminal en VS Code
python sistema_estudiantes.py

Resultado esperado en pantalla

🖥️ Salida del programa: 🎓 SISTEMA DE REGISTRO DE ESTUDIANTES — UTH ================================================== 📋 FICHAS DE ESTUDIANTES: ======================================== FICHA DE ESTUDIANTE ======================================== Nombre : Ana López Matrícula : DSM2024001 Carrera : DSM Promedio : 8.5 ======================================== ======================================== FICHA DE ESTUDIANTE ======================================== Nombre : Carlos Mendoza Matrícula : DSM2024002 Carrera : DSM Promedio : 6.3 ======================================== 📊 ESTADO ACADÉMICO: [DSM2024001] Ana López | Promedio: 8.5 | ✅ Aprobado [DSM2024002] Carlos Mendoza | Promedio: 6.3 | ❌ Reprobado [TICS2024001] Lucia Torres | Promedio: 0.0 | ❌ Reprobado ✏️ ACTUALIZAR PROMEDIOS: ✅ Promedio actualizado a 7.8 ❌ Error: el promedio debe estar entre 0.0 y 10.0 📊 ESTADO FINAL: [DSM2024001] Ana López | Promedio: 8.5 | ✅ Aprobado [DSM2024002] Carlos Mendoza | Promedio: 6.3 | ❌ Reprobado [TICS2024001] Lucia Torres | Promedio: 7.8 | ✅ Aprobado 📌 Carrera de Ana López: DSM 📌 Mínimo aprobatorio: 7.0
🎉 ¡Si ves esa salida, tu programa funciona correctamente! Acabas de crear tu primera clase en Python con 4 objetos, atributos de instancia, atributo de clase, y 4 métodos. Eso es Programación Orientada a Objetos real.

🐛 Sección 8 — Errores Comunes y Cómo Resolverlos

Si algo no funciona, revisa estos errores típicos:

Error en pantallaCausa probableSolución
IndentationError Falta sangría o la sangría no es consistente (mezcla de tabs y espacios) En VS Code activa "Indent using Spaces" y usa siempre 4 espacios
NameError: name 'Estudiante' is not defined Intentas usar la clase antes de definirla, o el nombre tiene un error tipográfico Asegúrate de que la definición de la clase está ANTES del código que la usa
TypeError: __init__() missing arguments Al crear el objeto no pasaste todos los argumentos requeridos Revisa cuántos parámetros tiene __init__ y proporciona todos
AttributeError: 'Estudiante' object has no attribute 'X' Intentas acceder a un atributo que no existe o lo escribiste diferente Revisa que el nombre del atributo en self.X sea exactamente igual
El archivo no ejecuta con python Python no está en el PATH del sistema Prueba con python3 en lugar de python, o reinstala Python marcando "Add to PATH"

🚀 Sección 9 — Reto Adicional (Opcional)

¿Terminaste todo? ¡Demuestra que dominaste el tema con estos desafíos!

✅ Sección 10 — Lista de Verificación Final

Antes de entregar tu práctica, verifica que cumples con todo:

🏠 Volver al Inicio del Curso