Saltar al contenido
Inicio 100 Días de Código en Python — Día 15: Entorno de Desarrollo Local y la Máquina de Café

100 Días de Código en Python — Día 15: Entorno de Desarrollo Local y la Máquina de Café

Nivel: Grado décimo Área: Tecnología e Informática Modalidad: Tutorial práctico Fuente: Curso "100 Days of Code: The Complete Python Pro Bootcamp" (Angela Yu, App Brewery). Contenido del Día 15 (inicio del nivel intermedio).

Este tutorial adapta pedagógicamente el Día 15. Las secciones 📝 Ejercicio original del curso provienen de los archivos del curso. Los retos 🟢🟡🟠🔴, el proyecto extra y el proyecto integrador son creaciones de esta adaptación. Las correcciones al material original aparecen como 🛠️ Nota técnica.

Nota sobre el material disponible: la carpeta del Día 15 contiene tres lecciones: 105 (requisitos de la Máquina de Café), 106 (solución paso a paso) y 107 (consejo de estudio). La numeración es continua con los Días 14 y 16, así que no faltan archivos. Sin embargo, no hay lecciones sobre cómo instalar Python y PyCharm, aunque el título del día habla del entorno local. Tampoco están el código inicial ni el PDF de requisitos que menciona el curso. Por eso:

  • La sección 1 es una guía breve de esta adaptación, basada en lo que el curso da por hecho: usar PyCharm, crear un proyecto y ejecutar main.py.
  • Los datos de las recetas se presentan como valores de referencia coherentes con lo que dicen las lecciones (por ejemplo, que el latte gasta 200 ml de agua de los 300 iniciales). Si tienes el código inicial del curso, usa sus valores.

Nota sobre las verificaciones: los errores y cálculos de este tutorial se comprobaron ejecutándolos con Python 3.14: la condición >=, los decimales de las monedas, el KeyError con una bebida mal escrita, el ValueError con una entrada vacía y el SyntaxError por comillas tipográficas.


Tabla de contenidos

  1. Antes de empezar: del navegador al computador
  2. El entorno de desarrollo local (guía de esta adaptación)
  3. Herramientas de PyCharm que usa el curso
  4. El proyecto: requisitos de la Máquina de Café
  5. 🚀 Proyecto del día: construir la Máquina de Café paso a paso
  6. 🌟 Proyecto extra: la Tienda Escolar Automática
  7. 🏆 Proyecto integrador de los Días 10 a 15: el Cajero de la Feria Empresarial
  8. 🧩 Comprueba lo aprendido
  9. 🤖 Programar con apoyo de IA
  10. 🛠️ Correcciones técnicas al material original
  11. 📋 Matriz de trazabilidad
  12. 📦 Evidencias de aprendizaje del Día 15

0. Antes de empezar: del navegador al computador

(Fuentes: 105 - Introduction & Requirements for the Coffee Machine Project.md, 107 - Location, Location, Location - Pavlov's Coding Corner.md)

Hasta el Día 14, programábamos en el navegador (el curso usa Replit). Desde hoy trabajaremos en un entorno de desarrollo local: Python y un editor profesional, PyCharm, instalados en el propio computador. Es como pasar de cocinar en una cocina prestada a tener tu propia cocina, con todas tus herramientas.

El proyecto del día: "Acabas de ser contratado. ¡Felicitaciones! Pero primero, el café: los programadores no trabajan sin café." La empresa te pide programar una máquina de café. Podrías comprar una por 230 dólares, pero la vas a crear desde cero. Por suerte, somos programadores: solo hacemos el software.

Consejo de estudio del curso (el "rincón de Pavlov"): define un lugar solo para estudiar. Si estudias donde ves series o comes, tu cerebro protesta: "¿Por qué hacemos algo difícil donde antes veíamos Netflix?". Si ese rincón solo se usa para estudiar, al llegar tu cerebro sabrá qué toca hacer. A Angela le sirvió para vencer la procrastinación.

💡 Actividad de inicio: describe en tu cuaderno cuál será tu "rincón de estudio" en casa o en el colegio y qué distracciones vas a dejar fuera.

Prerequisito general: diccionarios anidados (Día 9), funciones con parámetros, return y docstrings (Días 8 y 10), alcance y global (Día 12), bucles while (Día 5), f-strings y round (Día 2), y la depuración (Día 13).


1. El entorno de desarrollo local (guía de esta adaptación)

Sección creada para esta adaptación, porque la carpeta no incluye las lecciones de instalación. Los pasos generales son estables, pero los menús cambian con las versiones: sigue siempre las instrucciones oficiales de python.org (se abre en otra pestaña) y de JetBrains (se abre en otra pestaña).

🎯 Objetivo de aprendizaje

  • Instalar Python y un editor de código.
  • Crear un proyecto con un archivo main.py y ejecutarlo.

📖 Explicación conceptual

Pieza Qué es Analogía
Python (el intérprete) El programa que ejecuta tu código El motor
Editor / IDE (PyCharm, VS Code) Donde escribes, ejecutas y depuras el código. IDE = entorno de desarrollo integrado El tablero y el volante
Proyecto Una carpeta con tus archivos y su configuración El garaje de un carro
Intérprete del proyecto La versión de Python que usa ese proyecto (el curso pide la más reciente) Qué motor lleva el carro

Pasos generales:

  1. Instala Python desde python.org. En Windows, marca la casilla "Add python.exe to PATH" durante la instalación.
  2. Instala PyCharm (la edición gratuita es suficiente para el curso).
  3. Crea un proyecto nuevo, por ejemplo CoffeeMachine, y verifica que el intérprete sea la última versión de Python instalada.
  4. Clic derecho en la carpeta del proyecto → New → Python File → main.py.
  5. Escribe print("¡Hola desde mi computador!") y ejecútalo con el botón ▶️ o clic derecho → Run 'main'. El resultado aparece en la consola de la parte inferior.

Alternativa válida: VS Code con la extensión de Python. El curso usa PyCharm, así que las indicaciones de este y los siguientes días hacen referencia a sus menús.

⚠️ Errores frecuentes

Problema Causa probable Solución
"No Python interpreter configured" El proyecto no tiene intérprete Settings → Project → Python Interpreter y elige la versión instalada
python no se reconoce en la terminal de Windows No se marcó "Add to PATH" Reinstala marcando la casilla, o usa el comando py
El programa se ejecuta, pero no se ve nada Se ejecutó otro archivo Revisa qué archivo aparece junto al botón ▶️

2. Herramientas de PyCharm que usa el curso

(Fuentes: 105 y 106)

Durante la solución, el curso muestra varias herramientas del editor. Aprenderlas ahora te ahorrará mucho tiempo:

Herramienta Cómo se usa (según el curso) Para qué sirve
Comentarios TODO # TODO 1: Imprimir un informe de los recursos (con TODO en mayúsculas) Aparecen en la pestaña TODO; al hacer clic en uno, PyCharm te lleva a esa línea. Sirven para dividir el problema en tareas
Tamaño de letra Settings/Preferences → Appearance (interfaz) y Editor → Font (código) "No fuerces la vista": busca un equilibrio entre ver mucho código y leer cómodo
Edición multicursor Alt + Shift (Windows) u Option + Shift (Mac) y arrastrar hacia abajo desde el inicio de las líneas Escribir lo mismo en varias líneas a la vez (el curso lo usa para poner print( en 4 líneas)
Detener y volver a ejecutar Al ejecutar de nuevo, PyCharm pregunta si detiene el programa anterior; se puede marcar para no preguntar más Evitar tener dos copias del programa corriendo
Ver la documentación Pasar el ratón sobre una función (por ejemplo, round) o sobre una función propia con docstring Recordar qué hace y qué parámetros recibe
Advertencias Subrayados y resaltados en el código; al pasar el ratón, explican el problema Detectan código inalcanzable, errores de alcance, espacios faltantes entre funciones, etc.
Guía de longitud de línea Una línea vertical a la derecha del editor Indica cuándo una línea es demasiado larga

🛠️ Nota técnica: el curso dice que PEP 8 recomienda un máximo de 120 caracteres por línea. En realidad, la guía oficial PEP 8 (se abre en otra pestaña) recomienda 79 caracteres (72 para docstrings y comentarios) y permite que un equipo acuerde hasta 99. Los 120 son el valor por defecto de la guía de PyCharm, no de PEP 8.

🛠️ Nota técnica: el curso ejecuta con Ctrl + R, que es el atajo de Mac. En Windows y Linux, el atajo de PyCharm para ejecutar es Shift + F10. Los atajos pueden cambiar según la versión y la configuración del teclado: revisa Settings → Keymap.

Retos adicionales (creados para esta adaptación)

  • 🟢 Reto 1: crea 3 comentarios TODO en distintos lugares de un archivo y navega entre ellos con la pestaña TODO.
  • 🟡 Reto 2: usa la edición multicursor para convertir 5 líneas de texto en 5 print("...").
  • 🟠 Reto 3: escribe una función con docstring y comprueba que PyCharm lo muestra al pasar el ratón sobre la llamada.
  • 🔴 Reto 4: escribe a propósito una línea de más de 79 caracteres y divídela correctamente usando paréntesis. Investiga en PEP 8 cómo se recomienda hacerlo.

3. El proyecto: requisitos de la Máquina de Café

(Fuente: 105 - Introduction & Requirements for the Coffee Machine Project.md)

📖 Los datos del problema

Tres bebidas calientes, cada una con su receta y su precio. En el código inicial vienen en un diccionario anidado MENU. Estos son valores de referencia coherentes con las lecciones (el latte gasta 200 ml de agua):

Python
MENU = {
    "espresso": {
        "ingredients": {"water": 50, "coffee": 18},
        "cost": 1.5,
    },
    "latte": {
        "ingredients": {"water": 200, "milk": 150, "coffee": 24},
        "cost": 2.5,
    },
    "cappuccino": {
        "ingredients": {"water": 250, "milk": 100, "coffee": 24},
        "cost": 3.0,
    },
}

resources = {
    "water": 300,    # ml
    "milk": 200,     # ml
    "coffee": 100,   # g
}

Monedas de EE. UU. que acepta la máquina:

Moneda Nombre en inglés Valor
Moneda de 25 centavos quarter $0,25
Moneda de 10 centavos dime $0,10
Moneda de 5 centavos nickel $0,05
Moneda de 1 centavo penny $0,01

El curso comenta que la moneda de 5 centavos (nickel) es más grande que la de 10 (dime), algo que confunde a quien no es de EE. UU. "Una lección de diseño": el tamaño no siempre indica el valor.

📝 Ejercicio original del curso: requisitos del programa

# Requisito Comportamiento esperado
1 Preguntar "What would you like? (espresso/latte/cappuccino):" Se repite después de cada acción
2 Apagar con la palabra secreta off Para el personal de mantenimiento; el programa termina
3 Informe con la palabra secreta report Muestra agua, leche, café y dinero actuales
4 Comprobar recursos Si falta algo: "Sorry there is not enough water." (o milk, o coffee) y no se prepara
5 Procesar monedas Pide cuántas monedas de cada tipo y calcula el total
6 Comprobar la transacción Si no alcanza: "Sorry that's not enough money. Money refunded." Si alcanza: el precio va a las ganancias de la máquina y se entrega el cambio redondeado a 2 decimales
7 Preparar el café Se descuentan los ingredientes y se muestra "Here is your latte ☕️. Enjoy!"

Advertencia del curso: es un proyecto ambicioso. Dedícale al menos una hora antes de ver la solución, y compara tu programa con el comportamiento de la versión final.

🔍 Antes de programar

  • ¿Qué datos cambian mientras la máquina funciona? ¿Dónde los guardarás?
  • ¿Qué tareas se pueden convertir en funciones? ¿Qué recibe y qué devuelve cada una?
  • ¿En qué orden deben ocurrir las comprobaciones? ¿Tiene sentido pedir el dinero antes de saber si hay ingredientes?
  • Escribe los 7 requisitos como comentarios # TODO en tu main.py.

4. 🚀 Proyecto del día: construir la Máquina de Café paso a paso

(Fuente: 106 - Solution & Walkthrough for the Coffee Machine Code.md)

Mensaje del curso antes de la solución: hay infinitas soluciones posibles (con while o con for, con otras estructuras de datos…). La del curso es solo una. "No sientas que lo hiciste mal porque es diferente a la mía. Si funciona como esperas, considérate exitoso."

Contexto

Programar algo que existe en la vida real obliga a pensar en todos los casos: qué pasa si no hay leche, si el cliente paga de menos, si el técnico necesita apagarla.

Restricciones técnicas

Funciones con docstring, diccionarios anidados, un bucle while controlado por una variable y el manejo de una variable global.

Construcción paso a paso (siguiendo la solución del curso)

Versión 1 — El bucle principal y el apagado (requisitos 1 y 2). El curso empieza con while True: y descubre que el programa pregunta "hasta la eternidad". La solución es una variable de control:

Python
is_on = True

while is_on:
    choice = input("What would you like? (espresso/latte/cappuccino): ")
    if choice == "off":
        is_on = False

Versión 2 — El informe (requisito 3). Se crea profit = 0 (la alcancía empieza vacía) y un elif choice == "report": con cuatro print. El curso usa la edición multicursor para escribir los print y los convierte en f-strings:

Python
    elif choice == "report":
        print(f"Water: {resources['water']}ml")
        print(f"Milk: {resources['milk']}ml")
        print(f"Coffee: {resources['coffee']}g")
        print(f"Money: ${profit}")

Detalle de comillas: dentro de un f-string con comillas dobles, la clave del diccionario va entre comillas simples ('water').

Versión 3 — ¿Hay recursos? (requisito 4). En el else, drink = MENU[choice] obtiene el diccionario de la bebida. Como es una tarea con un objetivo claro, el curso la convierte en función:

Python
def is_resource_sufficient(order_ingredients):
    """Devuelve True cuando se puede preparar el pedido y False si los ingredientes no alcanzan."""
    for item in order_ingredients:
        if order_ingredients[item] >= resources[item]:
            print(f"Sorry there is not enough {item}.")
            return False
    return True

El curso ofrece una alternativa igual de válida si el doble return confunde: una variable is_enough = True que cambia a False dentro del if y se devuelve al final.

🛠️ Nota técnica (verificada): la condición >= rechaza el pedido cuando la máquina tiene exactamente la cantidad necesaria. Ejemplo: quedan 200 ml de agua, 150 de leche y 24 g de café, y se pide un latte (200, 150, 24). La máquina responde "Sorry there is not enough water", aunque sí alcanza. La condición correcta es >: solo falta el ingrediente si se necesita más de lo que hay.

🛠️ Nota técnica: el curso encuentra un error al pegar el mensaje desde el PDF: las comillas tipográficas (“ ”) no son comillas de programación (" "). Verificado: print(“hola”) produce SyntaxError: invalid character '“' (U+201C). Ocurre mucho al copiar código de documentos de Word, PDF o presentaciones.

Versión 4 — Procesar las monedas (requisito 5):

Python
def process_coins():
    """Devuelve el total calculado a partir de las monedas insertadas."""
    print("Please insert coins.")
    total = int(input("how many quarters?: ")) * 0.25
    total += int(input("how many dimes?: ")) * 0.1
    total += int(input("how many nickles?: ")) * 0.05
    total += int(input("how many pennies?: ")) * 0.01
    return total

La primera línea crea total; las demás suman con +=. El curso recomienda un docstring en toda función que devuelva algo: al pasar el ratón sobre la llamada, PyCharm lo muestra.

Versión 5 — ¿El pago alcanza? (requisito 6):

Python
def is_transaction_successful(money_received, drink_cost):
    """Devuelve True cuando se acepta el pago y False si el dinero no alcanza."""
    if money_received >= drink_cost:
        change = round(money_received - drink_cost, 2)
        print(f"Here is ${change} in change.")
        global profit
        profit += drink_cost
        return True
    else:
        print("Sorry that's not enough money. Money refunded.")
        return False

Lo que el curso destaca aquí:

  • global profit: profit está fuera de la función. Para modificarla desde dentro hay que declararla global (Día 12). Sin esa línea, PyCharm marca un error.
  • Código inalcanzable: si pones el return False antes del print, el print nunca se ejecuta y PyCharm lo resalta ("This code is unreachable").
  • round(numero, 2): redondea a 2 decimales. En la prueba del curso, el cambio fue de $2,42.

Versión final — Preparar el café (requisito 7):

Python
def make_coffee(drink_name, order_ingredients):
    """Descuenta los ingredientes necesarios de los recursos."""
    for item in order_ingredients:
        resources[item] -= order_ingredients[item]
    print(f"Here is your {drink_name} ☕️. Enjoy!")

Y el bloque else del bucle principal queda como una cadena de condiciones:

Python
    else:
        drink = MENU[choice]
        if is_resource_sufficient(drink["ingredients"]):
            payment = process_coins()
            if is_transaction_successful(payment, drink["cost"]):
                make_coffee(choice, drink["ingredients"])

Así se lee el camino hasta el café: la máquina está encendida → no es off ni report → hay recursos → el pago alcanza → se prepara. El curso concluye que "cuanto más claro tengas el papel de cada función, más fácil será desenredar la lógica".

Pruebas

Caso Resultado esperado
report al iniciar Water 300ml, Milk 200ml, Coffee 100g, Money $0
latte pagando 10 quarters "Here is $0.0 in change." y el latte
report después del latte Water 100ml, Milk 50ml, Coffee 76g, Money $2.5
Otro latte "Sorry there is not enough water."
espresso pagando con 1 moneda de cada tipo ($0,41) "Sorry that's not enough money. Money refunded."
off El programa termina

🧪 Prueba y depuración

La solución del curso cumple los requisitos, pero tiene cuatro problemas que puedes descubrir probándola:

  1. Recursos exactos: la condición >= rechaza pedidos que sí se pueden preparar (nota técnica de la versión 3). Crea un caso de prueba que lo demuestre y corrígelo.
  2. Bebida mal escrita: si el usuario escribe late o Latte, MENU[choice] produce KeyError: 'late' (verificado) y la máquina se apaga. Una máquina real no debería "romperse" por un error de tecleo. (Pistas: .lower(), if choice in MENU.)
  3. Monedas vacías o con letras: si el usuario pulsa Enter sin escribir, int("") produce ValueError: invalid literal for int() with base 10: '' (verificado).
  4. Decimales del dinero: los float no representan exactamente los centavos. Verificado: 0.1 * 3 da 0.30000000000000004. Aquí round corrige el cambio, pero las ganancias (profit) se suman sin redondear y, tras muchas ventas, el informe podría mostrar algo como $7.499999999. (Solución profesional: trabajar en centavos enteros, por ejemplo 250 en lugar de 2.5, y dividir entre 100 solo al mostrar.)

⭐ Extensión del proyecto

  • Una palabra secreta refill para reabastecer los ingredientes.
  • Mostrar el menú con los precios formateados: f"{precio:.2f}".
  • Contar cuántas bebidas de cada tipo se vendieron y mostrarlo en el informe.

¿Qué viene después? En el Día 16 se reconstruye esta misma máquina con programación orientada a objetos y se comparan las dos versiones.


5. 🌟 Proyecto extra: la Tienda Escolar Automática

Situación

El consejo de padres quiere una máquina expendedora para la tienda escolar que venda refrigerios saludables y reciba monedas colombianas.

Requisitos

  1. Un diccionario PRODUCTOS con al menos 5 productos (por ejemplo, fruta picada, yogur, agua, arepa, avena), cada uno con precio en pesos y unidades disponibles.
  2. Monedas aceptadas: $50, $100, $200, $500 y $1.000. Trabaja solo con enteros: en pesos no hay decimales, así que el problema de los float desaparece.
  3. Palabras secretas: apagar, inventario (unidades de cada producto y dinero recaudado) y surtir (pide el producto y la cantidad a agregar).
  4. Si un producto se agota, se informa y se sugiere otro disponible.
  5. Cambio con el menor número de monedas: en vez de solo decir "Su cambio es $700", indica qué monedas entregar (por ejemplo, 1 de $500 y 1 de $200). (Pista: divisiones enteras // y residuos %, del Día 2.)
  6. Validación: el programa no se detiene ante una opción inexistente o una cantidad de monedas que no sea un número.
  7. Todas las funciones con docstring y sin global (pasa y devuelve los datos como parámetros y resultados).

Decisiones que debes tomar

  • ¿Cómo evitas usar global para el dinero recaudado?
  • ¿Tu algoritmo de cambio funciona si la máquina no tiene suficientes monedas de un tipo? (Reto extra: lleva también el inventario de monedas.)

Reflexión

Compara tu programa con la Máquina de Café: ¿qué funciones reutilizaste casi iguales? ¿Qué cambió por trabajar con pesos enteros?


6. 🏆 Proyecto integrador de los Días 10 a 15: el Cajero de la Feria Empresarial

Proyecto integrador creado para esta adaptación. Integra funciones con salida (Día 10), el patrón de un juego con estado (Días 11 y 14), alcance (Día 12), depuración (Día 13) y el trabajo en un entorno local con TODOs (Día 15).

Situación problema

En la feria empresarial del colegio, cada curso tiene un puesto de venta. Se necesita un programa de caja por puesto que registre las ventas, controle el inventario y produzca un cierre del día.

Pregunta orientadora

¿Cómo descomponer un sistema real en funciones pequeñas, verificables y fáciles de mantener?

Requerimientos

  1. Planificación en el editor: antes de programar, escribe todos los requisitos como # TODO numerados. Entrega una captura de la pestaña TODO.
  2. Inventario inicial en un diccionario anidado: producto → precio, unidades y costo de producción.
  3. Menú con las opciones: vender, inventario, cierre, salir.
  4. Vender: permite varios productos en una misma venta (un "carrito"), valida que haya existencias antes de cobrar, recibe el pago en efectivo y calcula el cambio.
  5. Cierre: total vendido, unidades vendidas por producto, ganancia (ventas − costos) y el producto más vendido.
  6. Precios y dinero en enteros (pesos).
  7. Ninguna entrada inválida detiene el programa.
  8. Ninguna variable global: el estado se pasa y se devuelve entre funciones.

Etapas de desarrollo

  1. TODOs y diseño de las funciones (nombre, qué recibe, qué devuelve).
  2. Inventario y menú.
  3. Ventas de un solo producto.
  4. Carrito con varios productos.
  5. Cierre del día y validaciones.

Entregables

  • main.py con docstrings en todas las funciones.
  • Captura de la pestaña TODO al inicio y al final (todos resueltos).
  • Tabla de al menos 8 casos de prueba con los resultados.
  • Registro de depuración: 3 errores que encontraste con el depurador o con print y cómo los resolviste.

Casos de prueba

Caso Esperado
Vender 3 unidades de un producto con 2 disponibles Mensaje de existencias insuficientes; no se cobra
Pagar $5.000 por una compra de $3.500 Cambio: $1.500
Escribir vendr "Opción no válida" y el menú vuelve a aparecer
Cierre sin ventas Totales en cero, sin errores

Criterios técnicos

  • Cada función hace una sola cosa y su nombre lo dice.
  • El programa se ejecuta desde PyCharm (o VS Code) en un proyecto propio, no en el navegador.

7. 🧩 Comprueba lo aprendido

Conceptuales

  1. ¿Qué diferencia hay entre Python, el intérprete, y PyCharm?
  2. ¿Para qué sirven los comentarios # TODO?
  3. ¿Por qué is_transaction_successful necesita global profit, pero make_coffee puede modificar resources sin global? (Pista: ¿se reasigna la variable o se modifica el diccionario?)

Análisis de código

Python
def f(pedido):
    for item in pedido:
        if pedido[item] > resources[item]:
            return False
    return True

Con resources = {"water": 100, "milk": 50, "coffee": 76}, ¿qué devuelve f({"water": 50, "coffee": 18})? ¿Y f({"water": 200, "milk": 150, "coffee": 24})?

Predicción

¿Qué imprime round(2.675, 2)? Pruébalo. Si el resultado te sorprende, investiga por qué y relaciónalo con el problema 4 de la sección 🧪.

Depuración

Python
def process_coins():
    print("Please insert coins.")
    total = int(input("quarters?: ")) * 0.25
    total = int(input("dimes?: ")) * 0.1
    return total
    print(f"Total: {total}")

Encuentra dos problemas.

Modificación

Agrega una cuarta bebida, mocha, con chocolate como ingrediente nuevo. ¿Qué dos diccionarios debes modificar? ¿Hay que cambiar alguna función?

Creación

Escribe report() como función que devuelva el informe como un string (en lugar de imprimirlo), y úsala en el bucle principal.


8. 🤖 Programar con apoyo de IA

Trabajar en un entorno local te da herramientas para verificar lo que proponga una IA: ejecutar, depurar y ver advertencias.

Actividad: auditar una Máquina de Café generada por IA.

  1. Escribe primero los 7 requisitos como # TODO.
  2. Pide a una IA el programa completo y pégalo en un proyecto nuevo de PyCharm.
  3. Ejecuta la tabla de Pruebas de la sección 4 y las 4 situaciones de la sección 🧪. ¿Cuáles resuelve y cuáles no?
  4. Revisa las advertencias de PyCharm sobre su código. ¿Hay alguna?
  5. Pregúntale: "¿PEP 8 recomienda 79 o 120 caracteres por línea?". Verifica la respuesta en PEP 8 (se abre en otra pestaña).
  6. Escribe con tus palabras qué hace cada función antes de dar el código por bueno.

9. 🛠️ Correcciones técnicas al material original

Archivo Afirmación o comportamiento del curso Observación Tratamiento
(carpeta) Título: "Local Development Environment Setup" No hay lecciones de instalación en la carpeta; se agregó una guía breve marcada como adaptación Sección 1
(carpeta) Código inicial y PDF de requisitos No están en la carpeta; las recetas se presentan como valores de referencia Nota inicial y sección 3
106 if order_ingredients[item] >= resources[item] Rechaza pedidos cuando hay exactamente lo necesario; debe ser > (verificado) Nota técnica de la versión 3
106 PEP 8 recomienda 120 caracteres PEP 8 recomienda 79 (72 en docstrings); 120 es el valor por defecto de PyCharm Nota técnica de la sección 2
106 Ejecutar con Ctrl + R Es el atajo de Mac; en Windows/Linux, Shift + F10 Nota técnica de la sección 2
106 MENU[choice] sin validar Un error de tecleo produce KeyError y detiene la máquina (verificado) 🧪 del proyecto
106 Dinero con float 0.1 * 3 = 0.30000000000000004; las ganancias se acumulan sin redondear (verificado) 🧪 del proyecto

10. 📋 Matriz de trazabilidad

Contenido original Archivo de origen Concepto desarrollado Ejercicio original Reto adicional Proyecto relacionado
Contratación, recetas, recursos, monedas, requisitos, TODOs 105 Secciones 0, 2 y 3 Requisitos de la Máquina de Café Retos 1–4 de la sección 2 Secciones 4, 5 y 6
Solución: bucle, off, report, funciones, global, round, docstrings, herramientas de PyCharm 106 Secciones 2 y 4 Máquina de Café completa Depuración (4 problemas) y extensiones Secciones 5 y 6
Rincón de estudio (Pavlov) 107 Sección 0 — Actividad de inicio —
(Instalación del entorno: no está en la carpeta) — Sección 1 (adaptación) — — Sección 6
(No existe en el curso original) — — — Tienda Escolar Automática Sección 5
(No existe en el curso original) — — — Cajero de la Feria Empresarial Sección 6

11. 📦 Evidencias de aprendizaje del Día 15

  • Captura de PyCharm (o VS Code) con tu proyecto CoffeeMachine y la pestaña TODO.
  • Máquina de Café funcionando, con la tabla de pruebas completada.
  • Las correcciones de los 4 problemas de la sección 🧪, con un caso de prueba para cada uno.
  • Proyecto extra (Tienda Escolar) o integrador (Cajero de la Feria).
  • Descripción de tu "rincón de estudio".
  • Cuaderno de errores: intérprete no configurado, comillas tipográficas copiadas del PDF, KeyError por una bebida mal escrita, ValueError con int(""), código inalcanzable después de un return, global olvidado y decimales inexactos en el dinero.