Este tutorial adapta pedagógicamente el Día 11: el primer gran proyecto final del curso. Todo el día es un solo proyecto, organizado según las "pistas" (hints) del curso. Cada fase se trata como un tema, con sus conceptos, errores frecuentes, retos y verificación. Las secciones 📝 Ejercicio original del curso corresponden a las pistas 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.
Aclaración para el aula: el Blackjack es un juego de casino. Aquí se usa exclusivamente como problema de lógica y programación, sin dinero real. Este es un buen momento para conversar sobre los riesgos de los juegos de azar con apuestas, que en Colombia están prohibidos para menores de edad.
Tabla de contenidos
- Antes de empezar: tu primer proyecto final
- Fase 1: Reglas, requisitos y descomposición del problema (pistas 1–3)
- Fase 2: Repartir cartas (pistas 4–5)
- Fase 3: Calcular el puntaje (pistas 6–8)
- Fase 4: El turno del jugador (pistas 9–11)
- Fase 5: El turno del crupier y la comparación (pistas 12–13)
- Fase 6: Jugar otra vez
- 🚀 Proyecto del día: el Blackjack completo (pruebas y depuración)
- 🌟 Proyecto extra: Siete y Medio
- 🏆 Proyecto integrador del Día 11: Blackjack con Estadísticas
- 🤖 Programar con apoyo de IA
- 🛠️ Correcciones técnicas al material original
- 📋 Matriz de trazabilidad
- 📦 Evidencias de aprendizaje del Día 11
0. Antes de empezar: tu primer proyecto final
(Fuentes: 078 - Day 11 Goals- what we will make by the end of the day.md, 085 - A Solid Foundation goes a Long Way.md)
Hoy no hay conceptos nuevos. El reto es combinar todo lo aprendido en los Días 1 a 10: listas, random, funciones con entradas y salidas, while, condicionales y diccionarios. Es "probablemente lo más difícil que has construido hasta ahora", pero también lo más divertido.
Mensaje de la instructora: habrá momentos de duda. Descansa, come algo, "consúltalo con la almohada" y vuelve. Todo lo que necesitas ya lo aprendiste: solo falta juntar las piezas.
Mensaje de cierre: los fundamentos parecen pequeños por separado, pero combinados permiten construir proyectos complejos. Si algo no está 100 % claro, repásalo antes de seguir: una base sólida te lleva lejos.
Prerequisito general: Días 1 a 10, sobre todo
random.choice(Día 4),append(Día 4),sum(Día 5),whilecon bandera (Días 6 y 7) y funciones conreturn(Día 10).
1. Fase 1: Reglas, requisitos y descomposición
(Fuente: 079 - Blackjack Program Requirements and Game Rules.md)
🎯 Objetivo de aprendizaje
- Entender las reglas del juego antes de programar.
- Convertir las reglas en una lista de requisitos, luego en un diagrama de flujo y finalmente en tareas pequeñas.
📖 Reglas del Blackjack (resumen del curso)
- Objetivo: que tus cartas sumen lo más cerca posible de 21 sin pasarte. Si te pasas de 21, pierdes de inmediato (bust), sin importar por cuánto.
- Valores: las cartas del 2 al 10 valen su número; la J, la Q y la K valen 10; el As vale 11 o 1, lo que convenga.
- Reparto: cada jugador recibe 2 cartas. Del crupier (dealer) solo se ve la primera.
- Pedir carta: puedes pedir más cartas (hit) o plantarte (stand).
- Crupier: si tiene menos de 17, debe seguir pidiendo cartas.
- Empate: si ambos terminan con el mismo puntaje.
- Blackjack: un As y una carta de valor 10 con solo 2 cartas. Es la mejor mano posible.
📖 "Reglas de la casa" del curso (simplificaciones)
- La baraja es esta lista:
cards = [11, 2, 3, 4, 5, 6, 7, 8, 9, 10, 10, 10, 10]. Los tres 10 adicionales representan J, Q y K, así que el 10 es 4 veces más probable que las demás cartas. - El As empieza valiendo 11 y pasa a valer 1 si el jugador se pasa de 21.
- Baraja infinita: las cartas no se retiran después de salir. En un casino real sí se retiran, y por eso existe el "conteo de cartas".
📝 Ejercicio original del curso: pistas 1 a 3 (niveles de dificultad)
El curso propone elegir la dificultad según cuántas pistas se usen, como en un videojuego:
| Nivel | Pistas | Qué obtienes |
|---|---|---|
| Experto | Solo 1 | Jugar el juego y ver la versión final |
| Difícil | 1–2 | + la lista de requisitos del programa |
| Extra difícil | 1–3 | + un diagrama de flujo en PDF |
| Normal | Todas | + las tareas pequeñas paso a paso (pistas 4–13) |
El archivo inicial del curso (con las pistas escritas, el diagrama en PDF y el arte ASCII) no está incluido entre los materiales suministrados. Esta adaptación reconstruye las pistas 4 a 13 a partir de las explicaciones de la solución.
🔍 Antes de programar (actividad central de esta fase)
- Juega Blackjack en línea (sin dinero) o con una baraja física en parejas, hasta entender las reglas.
- Escribe tu propia lista de requisitos: ¿qué debe hacer el programa, paso a paso?
- Dibuja tu diagrama de flujo. Debe mostrar: el reparto inicial, el ciclo del jugador, el ciclo del crupier y la comparación final.
flowchart TD
A([Inicio]) --> B[Repartir 2 cartas a cada uno]
B --> C[Calcular puntajes]
C --> D{¿Blackjack de alguno<br/>o jugador > 21?}
D -- Sí --> G
D -- No --> E{¿El jugador pide carta?}
E -- Sí --> F[Dar carta al jugador] --> C
E -- No --> G[Turno del crupier:<br/>pedir mientras tenga < 17]
G --> H[Comparar puntajes]
H --> I([Mostrar resultado])(Este diagrama es una versión propia de esta adaptación; el del curso viene en el PDF de la pista 3, que no está incluido.)
2. Fase 2: Repartir cartas
(Fuente: 080 - Hint 4 & 5 Solution Walkthrough.md)
🎯 Objetivo de aprendizaje
- Crear una función que devuelva una carta al azar.
- Agregar elementos a una lista con
append, entendiendo por qué+=falla con un solo número.
📝 Ejercicio original del curso: pista 4
Enunciado: crea deal_card(), que devuelve una carta al azar de la lista cards.
Conceptos: random.choice (Día 4), return (Día 10) y docstring.
📝 Ejercicio original del curso: pista 5
Enunciado: reparte 2 cartas al usuario y 2 al computador, partiendo de las listas vacías user_cards = [] y computer_cards = [].
Técnica del curso: for _ in range(2):. El guion bajo _ indica que no se usa la variable del bucle: solo se quiere repetir dos veces.
Refactorización del curso: en lugar de new_card = deal_card() y después user_cards.append(new_card), se puede escribir directamente user_cards.append(deal_card()). Ojo con los tres paréntesis al final.
⚠️ El error clásico: += con listas (lo muestra el curso)
user_cards += deal_card() # ❌ TypeError: 'int' object is not iterable
user_cards.append(deal_card()) # ✅
user_cards += [deal_card()] # ✅ también, porque ahora es una listaPor qué: con listas, += equivale a extend(), que espera otra lista (algo "iterable"), no un número suelto (verificado).
Retos adicionales (creados para esta adaptación)
- 🟢 Reto 1: llama
deal_card()20 veces e imprime los resultados. ¿Aparece más el 10? ¿Por qué? - 🟡 Reto 2: crea
deal_hand(n), que devuelve una lista conncartas. - 🟠 Reto 3: simula 1000 cartas y cuenta cuántas veces sale cada valor con un diccionario (Día 9). ¿Se acerca el 10 a 4/13 ≈ 30.8 %?
- 🔴 Reto 4: diseña una versión con baraja finita: una lista de 52 cartas de la que se retira cada carta repartida. (Investiga
random.shuffleylista.pop().) ¿Qué cambia en las probabilidades?
3. Fase 3: Calcular el puntaje
(Fuente: 081 - Hint 6-8 Solution Walkthrough.md)
🎯 Objetivo de aprendizaje
- Crear
calculate_score(cards)consum(). - Representar un Blackjack con un valor especial (0).
- Ajustar el valor del As de 11 a 1 con
remove()yappend().
📝 Ejercicio original del curso: pistas 6, 7 y 8
Pista 6: calculate_score(cards) devuelve la suma de las cartas con sum(cards).
Pista 7: detectar un Blackjack. Una mano de 2 cartas con un As (11) y un 10. El curso muestra dos formas:
| Forma | Condición |
|---|---|
| Explícita | 11 in cards and 10 in cards and len(cards) == 2 |
| Simplificada | sum(cards) == 21 and len(cards) == 2 |
Si hay Blackjack, la función devuelve 0, un valor especial que el resto del programa interpreta como "Blackjack".
Pista 8: el As. Si hay un 11 en la mano y la suma pasa de 21, se reemplaza el 11 por un 1 con cards.remove(11) y cards.append(1).
🔍 Antes de programar
- Calcula a mano:
[11, 10],[5, 6, 10],[11, 5, 9],[11, 11],[11, 11, 10]. - ¿Qué debería pasar con dos Ases que hacen pasar la mano de 21?
🛠️ Nota técnica (verificada): la pista 8 usa un
if, así que reemplaza solo un As. Con[11, 11, 10]la versión del curso devuelve 22 (se pasa), cuando la mano podría valer 12 (1 + 1 + 10). La corrección es cambiarifporwhile: "mientras haya un 11 y la suma pase de 21, cambia un 11 por 1".
💡 Diseño con "valores especiales": usar 0 para indicar un Blackjack funciona, pero obliga a recordarlo en todo el programa. Por ejemplo, el crupier debe pedir cartas "si tiene menos de 17 y no es 0". Discute: ¿qué alternativas habría? Por ejemplo, una función aparte
es_blackjack(cards)que devuelvaTrueoFalse.
⚠️ Errores frecuentes
- Olvidar
len(cards) == 2: una mano de tres cartas que suma 21 (por ejemplo[5, 6, 10]) no es Blackjack. removesin verificar:cards.remove(11)produceValueErrorsi no hay ningún 11 en la lista. Por eso la condición11 in cardses necesaria.- La función modifica la lista original:
calculate_scorecambia la listacardsque recibe (el 11 pasa a ser 1). Por eso, al mostrar la mano, el jugador verá un1. ¿Es aceptable? Discútelo.
Retos adicionales (creados para esta adaptación)
- 🟢 Reto 1: escribe una tabla de pruebas de
calculate_scorecon 8 manos y el resultado esperado, antes de programar. - 🟡 Reto 2: implementa la corrección con
whiley verifica[11, 11, 10]→ 12. - 🟠 Reto 3: escribe
es_blackjack(cards)(devuelve un booleano) y una versión decalculate_scoreque no use el 0 especial. - 🔴 Reto 4: escribe una versión de
calculate_scoreque no modifique la lista original: cuenta los Ases y resta 10 por cada uno mientras haga falta.
4. Fase 4: El turno del jugador
(Fuentes: 082 - Hint 9 Solution Walkthrough- Refactoring and calling calculate_score().md, 083 - Hint 10-12 Solution Walkthrough.md)
🎯 Objetivo de aprendizaje
- Ordenar el código: las funciones se definen antes de llamarlas.
- Controlar el juego con la bandera
is_game_overdentro de unwhile.
📝 Ejercicio original del curso: pistas 9, 10 y 11
Pista 9: calcula user_score y computer_score. Si alguno tiene Blackjack (0) o el usuario pasa de 21, el juego termina: is_game_over = True.
Pista 10: si el juego no ha terminado, pregunta al usuario: 'y' para otra carta o 'n' para plantarse. Con 'y', dale otra carta; con 'n', is_game_over = True.
Pista 11: repite la pista 9 después de cada carta nueva, hasta que termine el juego. Solución: un while not is_game_over:.
Buenas prácticas que muestra el curso:
- Mover la definición de
calculate_scorearriba, antes del código que la llama (Día 6). - Agregar docstrings a cada función (Día 10).
- Probar después de cada pista. El curso imprime las cartas y el puntaje del usuario, y solo la primera carta del computador (
computer_cards[0]), para comprobar que todo va bien.
🔍 Antes de programar
- ¿Qué líneas deben ir dentro del
whiledel jugador? ¿Cuáles fuera? - ¿Qué pasa si el usuario escribe
Yen mayúscula? (Día 3:.lower().)
Retos adicionales (creados para esta adaptación)
- 🟢 Reto 1: muestra en cada ronda las cartas del jugador separadas por comas (
10, 5, 6) en lugar de la lista con corchetes. - 🟡 Reto 2: valida la respuesta: solo acepta
yon, y vuelve a preguntar si es otra cosa. - 🟠 Reto 3: agrega un aviso cuando el puntaje sea 17 o más: "Cuidado: estás cerca de 21".
- 🔴 Reto 4: calcula, antes de preguntar, la probabilidad de pasarse si pides otra carta (cuántas cartas de la lista
cardste harían superar 21, dividido entre 13) y muéstrala como ayuda al jugador.
5. Fase 5: El turno del crupier y la comparación
(Fuentes: 083 - Hint 10-12 Solution Walkthrough.md, 084 - Hint 13 Solution Walkthrough.md)
🎯 Objetivo de aprendizaje
- Programar la estrategia del crupier con un
while. - Evitar variables "posiblemente no definidas" y el sombreado de nombres.
- Ordenar correctamente las condiciones de
compare().
📝 Ejercicio original del curso: pista 12, el crupier
Enunciado: cuando el usuario termina, el computador pide cartas mientras su puntaje sea menor que 17 y no tenga Blackjack:
while computer_score != 0 and computer_score < 17:
computer_cards.append(deal_card())
computer_score = calculate_score(computer_cards)Advertencia del editor que el curso resuelve: "Name 'computer_score' can be undefined". La variable solo se crea dentro del while del jugador; si ese bucle no se ejecutara, no existiría. Solución del curso: inicializar user_score = -1 y computer_score = -1 al inicio. No se usa 0, porque 0 significa Blackjack; un número negativo delata un error si algo sale mal.
📝 Ejercicio original del curso: pista 13, compare
Enunciado: compare(u_score, c_score) devuelve un mensaje de resultado: empate, Blackjack de alguno, alguien se pasó, o quién tiene más puntos.
Sombreado de nombres (el curso lo corrige): si el parámetro se llama igual que la variable global (user_score), el editor advierte "Shadows name from outer scope". El curso usa Refactor → Rename para cambiarlos a u_score y c_score. (El ámbito o scope se estudia a fondo en el Día 12.)
El orden de las condiciones importa (Día 3): if/elif se evalúan de arriba hacia abajo y se detienen en la primera verdadera.
🛠️ Nota técnica (verificada): la transcripción acelera esta parte ("vamos añadiendo todas estas otras condiciones"). Si la primera condición es "
u_score == c_score→ Empate", una mano en la que ambos se pasan con 22 se declara empate, cuando el jugador ya había perdido al pasarse. La primera comprobación debe ser "el jugador se pasó" o "ambos se pasaron → pierdes".
Orden recomendado:
| # | Condición | Resultado |
|---|---|---|
| 1 | Ambos > 21 | Pierdes (te pasaste primero) |
| 2 | Iguales | Empate |
| 3 | Crupier = 0 | Pierdes (el rival tiene Blackjack) |
| 4 | Jugador = 0 | Ganas con Blackjack |
| 5 | Jugador > 21 | Pierdes (te pasaste) |
| 6 | Crupier > 21 | Ganas (el rival se pasó) |
| 7 | Jugador > crupier | Ganas |
| 8 | En otro caso | Pierdes |
Retos adicionales (creados para esta adaptación)
- 🟢 Reto 1: muestra la mano final de ambos jugadores con sus puntajes antes del resultado.
- 🟡 Reto 2: escribe una prueba por cada fila de la tabla de
compare, llamando la función con valores fijos, sin jugar. - 🟠 Reto 3: haz que el crupier no pida cartas si el jugador ya se pasó. ¿Cambia algún resultado? ¿Por qué es más realista?
- 🔴 Reto 4: en algunos casinos el crupier también pide carta con un 17 "suave" (17 con un As que vale 11). ¿Cómo lo detectarías con la lista de cartas? Implementa esta variante.
6. Fase 6: Jugar otra vez
(Fuente: 084 - Hint 13 Solution Walkthrough.md, parte final)
📝 Ejercicio original del curso: reiniciar
Enunciado: pregunta "¿Quieres jugar una partida de Blackjack? y/n". Mientras la respuesta sea y: limpia la pantalla (print("\n" * 20)) y llama play_game().
Técnica del curso: todo el juego (desde las listas vacías hasta la comparación) queda dentro de una función play_game(), que se llama desde un while:
while input("¿Quieres jugar una partida de Blackjack? Escribe 'y' o 'n': ") == "y":
print("\n" * 20)
play_game()Observa que la llamada a input va dentro de la condición del while: su salida reemplaza la llamada (Día 10) y se compara con "y" en cada vuelta.
El logo: from art import logo y print(logo) al inicio de play_game(). El archivo art.py no está incluido entre los materiales suministrados: crea tu propio logo.
7. 🚀 Proyecto del día: el Blackjack completo
(Fuente: archivos 079–084, proyecto oficial del curso original)
Requisitos funcionales
- Mostrar el logo y preguntar si se quiere jugar.
- Repartir 2 cartas a cada uno y mostrar la mano y el puntaje del jugador, y solo la primera carta del crupier.
- Terminar de inmediato si hay un Blackjack o si el jugador se pasa.
- Permitir pedir cartas hasta plantarse o pasarse.
- Hacer que el crupier pida cartas mientras tenga menos de 17 (y no tenga Blackjack).
- Mostrar ambas manos finales y el resultado.
- Preguntar si se quiere jugar otra vez.
Pruebas (con manos fijas)
Para probar, reemplaza temporalmente el reparto aleatorio por listas fijas, por ejemplo user_cards = [11, 10].
| Mano del jugador | Mano del crupier | Resultado esperado |
|---|---|---|
[11, 10] |
[10, 9] |
Ganas con Blackjack |
[10, 9] |
[11, 10] |
Pierdes: el rival tiene Blackjack |
[10, 8] |
[10, 8] |
Empate |
[10, 6, 9] (25) |
cualquiera | Pierdes: te pasaste |
[10, 9] |
[10, 6, 8] (24) |
Ganas: el rival se pasó |
[11, 11, 10] |
[10, 8] |
Con la corrección de while: 12 frente a 18 → Pierdes. Con la versión del curso: 22, "te pasaste" |
🧪 Prueba y depuración
Este fragmento tiene cuatro errores:
def calculate_score(cards):
if sum(cards) == 21 and len(cards) == 2:
return 0
if 11 in cards and sum(cards) > 21:
cards.remove(11)
cards.append(1)
return sum(cards)
def play_game():
user_cards = []
computer_cards = []
is_game_over = False
for _ in range(2):
user_cards += deal_card()
computer_cards.append(deal_card())
while not is_game_over:
user_score = calculate_score(user_cards)
computer_score = calculate_score(computer_cards)
if user_score == 0 or computer_score == 0 or user_score > 21:
is_game_over = True
else:
if input("¿Otra carta? y/n: ") == "y":
user_cards.append(deal_card())
else:
is_game_over = True
while computer_score < 17:
computer_cards.append(deal_card())
computer_score = calculate_score(computer_cards)(Pistas: un if que debería ser while, un += con un número, un crupier que pide cartas aunque tenga Blackjack y una función que nunca se define en este fragmento.)
⭐ Extensión del proyecto
- Mostrar las cartas con su nombre (As, J, Q, K) y un símbolo de palo (♠ ♥ ♦ ♣), guardando el valor y el nombre por separado.
- Implementar la baraja finita (Reto 4 de la Fase 2).
- Contar las victorias, derrotas y empates de la sesión.
8. 🌟 Proyecto extra: Siete y Medio
Reglas
- Baraja española de 40 cartas: del 1 al 7, más la sota, el caballo y el rey, en 4 palos.
- Valores: del 1 al 7, su número; las figuras (sota, caballo y rey) valen 0.5.
- Objetivo: acercarse a 7.5 sin pasarse.
- La banca pide cartas mientras tenga menos de 5.5 (regla de esta adaptación; hay variantes regionales).
Requisitos
- Una lista
cartas = [1, 2, 3, 4, 5, 6, 7, 0.5, 0.5, 0.5](baraja infinita, como en el curso). - Reutilizar la estructura del Blackjack:
repartir(),calcular_puntaje(),comparar(), turno del jugador y turno de la banca. - Adaptar los valores: trabajar con
floaty comparar con 7.5. - Cada partida empieza con una carta por jugador, no con dos.
Pregunta de análisis
¿Qué partes del código del Blackjack pudiste reutilizar sin cambios? ¿Cuáles tuviste que modificar? ¿Qué te dice eso sobre la calidad del diseño de tus funciones?
Casos de prueba
| Mano | Puntaje | ¿Se pasa? |
|---|---|---|
[7, 0.5] |
7.5 | No (es la mejor mano) |
[5, 3] |
8 | Sí |
[0.5, 0.5, 6] |
7.0 | No |
9. 🏆 Proyecto integrador del Día 11: Blackjack con Estadísticas
Proyecto integrador creado para esta adaptación. Amplía el Blackjack con un sistema de puntos virtuales (sin dinero real) y estadísticas, e integra los Días 1 a 11.
Situación problema
Queremos analizar qué tan buena es una estrategia de juego. Para eso, el programa debe llevar registros y resumir los resultados de muchas partidas.
Pregunta orientadora
¿Cómo convertir un juego en una herramienta que registra datos y ayuda a sacar conclusiones?
Requerimientos
- El jugador empieza con 100 puntos virtuales. Antes de cada mano, elige cuántos arriesga, validando que sea un número entre 1 y su saldo.
- Si gana, suma los puntos arriesgados; si gana con Blackjack, suma 1.5 veces lo arriesgado; si pierde, los resta; si empata, no hay cambio.
- Un diccionario
estadisticas = {"victorias": 0, "derrotas": 0, "empates": 0, "blackjacks": 0}que se actualiza después de cada mano. - El juego termina si el saldo llega a 0 o si el usuario decide salir.
- Resumen final: manos jugadas, porcentaje de victorias con un decimal, saldo final y mejor racha de victorias seguidas.
- Modo simulación: una función
jugador_automatico(puntaje)que decide pedir carta si el puntaje es menor que un umbral (por ejemplo 16). Simula 1000 manos con umbrales de 12, 15 y 17, y compara el porcentaje de victorias. - Funciones con
return, docstrings y las correcciones de las Fases 3 y 5.
Entregables
- Código funcional.
- Tabla de resultados de la simulación con los 3 umbrales.
- Conclusión escrita: ¿qué umbral funcionó mejor en tus simulaciones?
- Reflexión: ¿por qué, a largo plazo, la casa siempre tiene ventaja en los juegos de azar?
Criterios técnicos
- Sin errores con las entradas de la tabla de pruebas del proyecto del día.
- Las estadísticas suman el total de manos jugadas.
- La simulación usa exactamente la misma lógica que el juego interactivo: se reutilizan funciones, no se copia código.
10. 🤖 Programar con apoyo de IA
El curso recomienda intentar el proyecto con la menor cantidad de pistas posible. Una IA puede darte el Blackjack completo en segundos, pero así te saltas justamente el ejercicio de descomponer el problema, que es la habilidad central de hoy.
Uso recomendado:
- Haz tú mismo la lista de requisitos y el diagrama.
- Si te atascas en una fase, pide una pista, no la solución: "¿Qué estructura de control usarías para que el crupier siga pidiendo cartas?".
- Auditoría: cuando termines, pide a una IA que revise tu
calculate_scorey tucompare. ¿Detecta el caso de dos Ases? ¿Y el 22 contra 22? Verifica cada afirmación con tus pruebas.
11. 🛠️ Correcciones técnicas al material original
| Archivo | Comportamiento del curso | Observación (verificada) | Tratamiento |
|---|---|---|---|
081 |
if 11 in cards and sum(cards) > 21 reemplaza un solo As |
[11, 11, 10] → 22 en lugar de 12. Se corrige con while |
Nota técnica en la Fase 3, pruebas y depuración |
084 |
El orden de las condiciones de compare se presenta rápido |
Si "empate" va primero, 22 contra 22 se declara empate | Nota técnica y tabla de orden en la Fase 5 |
083 |
El crupier pide cartas aunque el jugador ya se haya pasado | No cambia el resultado, pero es innecesario y poco realista | Reto 3 de la Fase 5 |
081 |
calculate_score modifica la lista que recibe |
La mano mostrada cambia de 11 a 1; es un efecto secundario a tener en cuenta | Errores frecuentes de la Fase 3 y Reto 4 |
079 |
Archivo inicial con pistas, diagrama en PDF y arte ASCII | No están incluidos entre los materiales suministrados | Se reconstruyen las pistas y se propone un diagrama propio |
12. 📋 Matriz de trazabilidad
| Contenido original | Archivo de origen | Concepto desarrollado | Ejercicio original | Reto adicional | Proyecto relacionado |
|---|---|---|---|---|---|
| Objetivos: primer proyecto final | 078 |
Sección 0 | Jugar la versión final | — | Sección 7 |
| Reglas, reglas de la casa, niveles de pistas | 079 |
Fase 1 | Pistas 1–3: requisitos y diagrama | Diagrama propio | Secciones 7, 8 y 9 |
deal_card, reparto, append frente a += |
080 |
Fase 2 | Pistas 4–5 | Retos 1–4 de la Fase 2 (baraja finita) | Secciones 7 y 9 |
calculate_score, Blackjack = 0, el As |
081 |
Fase 3 | Pistas 6–8 | Retos 1–4 de la Fase 3 (dos Ases) | Secciones 7, 8 y 9 |
Refactorizar, bandera is_game_over |
082 |
Fase 4 | Pista 9 | Retos 1–4 de la Fase 4 | Sección 7 |
Pedir carta, while del jugador, crupier, variables inicializadas |
083 |
Fases 4 y 5 | Pistas 10–12 | Retos 1–4 de la Fase 5 | Secciones 7 y 9 |
compare, sombreado de nombres, reiniciar, logo |
084 |
Fases 5 y 6 | Pista 13 y reinicio | Tabla de orden de compare |
Sección 7 |
| Una base sólida | 085 |
Sección 0 | — | — | — |
| (No existe en el curso original) | — | — | — | Siete y Medio | Sección 8 |
| (No existe en el curso original) | — | — | — | Blackjack con Estadísticas | Sección 9 |
13. 📦 Evidencias de aprendizaje del Día 11
- Lista de requisitos y diagrama de flujo propios, hechos antes de programar.
- Blackjack funcionando, con la tabla de pruebas de manos fijas.
- Corrección del caso de dos Ases, con una explicación escrita.
- Depuración resuelta: los 4 errores encontrados y explicados.
- Proyecto extra (Siete y Medio) o integrador (Estadísticas y simulación).
- Nivel de pistas que usaste y una reflexión: ¿qué fase fue la más difícil y por qué?