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) y107(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, elKeyErrorcon una bebida mal escrita, elValueErrorcon una entrada vacía y elSyntaxErrorpor comillas tipográficas.
Tabla de contenidos
- Antes de empezar: del navegador al computador
- El entorno de desarrollo local (guía de esta adaptación)
- Herramientas de PyCharm que usa el curso
- El proyecto: requisitos de la Máquina de Café
- 🚀 Proyecto del día: construir la Máquina de Café paso a paso
- 🌟 Proyecto extra: la Tienda Escolar Automática
- 🏆 Proyecto integrador de los Días 10 a 15: el Cajero de la Feria Empresarial
- 🧩 Comprueba lo aprendido
- 🤖 Programar con apoyo de IA
- 🛠️ Correcciones técnicas al material original
- 📋 Matriz de trazabilidad
- 📦 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,
returny docstrings (Días 8 y 10), alcance yglobal(Día 12), bucleswhile(Día 5), f-strings yround(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.pyy 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:
- Instala Python desde python.org. En Windows, marca la casilla "Add python.exe to PATH" durante la instalación.
- Instala PyCharm (la edición gratuita es suficiente para el curso).
- Crea un proyecto nuevo, por ejemplo
CoffeeMachine, y verifica que el intérprete sea la última versión de Python instalada. - Clic derecho en la carpeta del proyecto → New → Python File →
main.py. - 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
TODOen 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):
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
# TODOen tumain.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
whileo confor, 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:
is_on = True
while is_on:
choice = input("What would you like? (espresso/latte/cappuccino): ")
if choice == "off":
is_on = FalseVersió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:
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:
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 TrueEl 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”)produceSyntaxError: 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):
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 totalLa 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):
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 FalseLo que el curso destaca aquí:
global profit:profitestá fuera de la función. Para modificarla desde dentro hay que declararlaglobal(Día 12). Sin esa línea, PyCharm marca un error.- Código inalcanzable: si pones el
return Falseantes delprint, elprintnunca 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):
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:
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
offnireport→ 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:
- 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. - Bebida mal escrita: si el usuario escribe
lateoLatte,MENU[choice]produceKeyError: '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.) - Monedas vacías o con letras: si el usuario pulsa Enter sin escribir,
int("")produceValueError: invalid literal for int() with base 10: ''(verificado). - Decimales del dinero: los
floatno representan exactamente los centavos. Verificado:0.1 * 3da0.30000000000000004. Aquíroundcorrige 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
refillpara 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
- Un diccionario
PRODUCTOScon al menos 5 productos (por ejemplo, fruta picada, yogur, agua, arepa, avena), cada uno con precio en pesos y unidades disponibles. - Monedas aceptadas: $50, $100, $200, $500 y $1.000. Trabaja solo con enteros: en pesos no hay decimales, así que el problema de los
floatdesaparece. - Palabras secretas:
apagar,inventario(unidades de cada producto y dinero recaudado) ysurtir(pide el producto y la cantidad a agregar). - Si un producto se agota, se informa y se sugiere otro disponible.
- 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.) - Validación: el programa no se detiene ante una opción inexistente o una cantidad de monedas que no sea un número.
- 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
globalpara 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
- Planificación en el editor: antes de programar, escribe todos los requisitos como
# TODOnumerados. Entrega una captura de la pestaña TODO. - Inventario inicial en un diccionario anidado: producto → precio, unidades y costo de producción.
- Menú con las opciones:
vender,inventario,cierre,salir. - 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.
- Cierre: total vendido, unidades vendidas por producto, ganancia (ventas − costos) y el producto más vendido.
- Precios y dinero en enteros (pesos).
- Ninguna entrada inválida detiene el programa.
- Ninguna variable
global: el estado se pasa y se devuelve entre funciones.
Etapas de desarrollo
- TODOs y diseño de las funciones (nombre, qué recibe, qué devuelve).
- Inventario y menú.
- Ventas de un solo producto.
- Carrito con varios productos.
- Cierre del día y validaciones.
Entregables
main.pycon 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
printy 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
- ¿Qué diferencia hay entre Python, el intérprete, y PyCharm?
- ¿Para qué sirven los comentarios
# TODO? - ¿Por qué
is_transaction_successfulnecesitaglobal profit, peromake_coffeepuede modificarresourcessinglobal? (Pista: ¿se reasigna la variable o se modifica el diccionario?)
Análisis de código
def f(pedido):
for item in pedido:
if pedido[item] > resources[item]:
return False
return TrueCon 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
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.
- Escribe primero los 7 requisitos como
# TODO. - Pide a una IA el programa completo y pégalo en un proyecto nuevo de PyCharm.
- 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?
- Revisa las advertencias de PyCharm sobre su código. ¿Hay alguna?
- Pregúntale: "¿PEP 8 recomienda 79 o 120 caracteres por línea?". Verifica la respuesta en PEP 8 (se abre en otra pestaña).
- 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
CoffeeMachiney 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,
KeyErrorpor una bebida mal escrita,ValueErrorconint(""), código inalcanzable después de unreturn,globalolvidado y decimales inexactos en el dinero.