Este tutorial adapta pedagógicamente el Día 18. 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 las verificaciones: los ejemplos que no dibujan se probaron ejecutándolos: tuplas, cálculo de ángulos y extracción de colores con
colorgram. Los programas de Turtle abren una ventana gráfica, así que su comportamiento se revisó siguiendo la lógica del código y la documentación oficial (se abre en otra pestaña). Ejecútalos en tu computador para ver el resultado.
Tabla de contenidos
- Antes de empezar: del texto a los gráficos
- Turtle y la documentación
- Formas de importar, alias, paquetes y entornos virtuales
- Retos de Turtle 1 a 3: cuadrado, línea punteada y polígonos
- Reto 4: la caminata aleatoria
- Tuplas y colores RGB aleatorios
- Reto 5: el espirógrafo
- 🚀 Proyecto del día: la Pintura de Puntos estilo Hirst
- 🌟 Proyecto extra: Mandala con los Colores de Colombia
- 🏆 Proyecto integrador del Día 18: Galería de Arte Generativo del Curso
- 🤖 Programar con apoyo de IA
- 🛠️ Correcciones técnicas al material original
- 📋 Matriz de trazabilidad
- 📦 Evidencias de aprendizaje del Día 18
0. Antes de empezar
(Fuentes: 127 - Day 18 Goals- what we will make by the end of the day.md, 138 - Space out your study sessions and stay consistent.md)
Hoy dejamos la consola de texto para dibujar en la pantalla. Profundizaremos en Turtle, aprenderemos las tuplas y más formas de importar módulos. Al final crearemos una pintura de puntos al estilo del artista Damien Hirst, cuyas obras de puntos se han vendido, según el curso, por más de un millón de libras.
Mensaje de cierre del curso: aprender a programar se parece a ir al gimnasio. Pasar 48 horas seguidas entrenando no sirve: lo que funciona es ir un poco todos los días. La constancia es lo que hace crecer los "músculos de programación".
Prerequisito general: objetos, atributos y métodos (Días 16 y 17),
random(Día 4), bucles (Días 5 y 6), funciones conreturn(Día 10) y%(Día 3).
1. Turtle y la documentación
(Fuente: 128 - Understanding Turtle Graphics and How to use the Documentation.md)
🎯 Objetivo de aprendizaje
- Crear y controlar un objeto
Turtley la ventanaScreen. - Buscar en la documentación los métodos necesarios, con ayuda de internet cuando haga falta.
📖 Explicación conceptual
from turtle import Turtle, Screen
timmy_the_turtle = Turtle()
timmy_the_turtle.shape("turtle") # formas: arrow, turtle, circle, square, triangle, classic
timmy_the_turtle.color("red")
timmy_the_turtle.forward(100)
timmy_the_turtle.right(90) # gira 90° a la derecha: de mirar al Este a mirar al Sur
screen = Screen()
screen.exitonclick() # SIEMPRE al final: mantiene la ventana abierta hasta hacer clic¿Cómo se sabe todo esto? "¿Porque tengo mucha experiencia o soy muy inteligente? No." Se sabe gracias a la documentación. Su índice está organizado por categorías: movimiento, control del lápiz, color, visibilidad…
Estrategia de búsqueda del curso: el buscador interno de Stack Overflow da resultados poco relevantes. Es mejor buscar en un buscador general agregando "stack overflow" al final, leer la respuesta y luego confirmarla en la documentación oficial.
¿Qué es Tk y qué es una GUI?
- Los nombres de colores de Turtle vienen de las especificaciones de color de Tk. Turtle funciona "por debajo" con tkinter, la librería de Python para crear interfaces gráficas de usuario (GUI).
- Antes existían solo las interfaces de texto (como MS-DOS o nuestra consola). Con las GUI llegaron las ventanas, el ratón y el "apuntar y hacer clic". El curso menciona el Apple Lisa como la primera computadora con este tipo de interfaz.
🛠️ Nota técnica: el Apple Lisa (1983) fue uno de los primeros computadores comerciales con interfaz gráfica, pero no el primero en tenerla: el Xerox Alto (1973) y los trabajos anteriores de Douglas Engelbart ya usaban ventanas y ratón. Es un buen tema para investigar en clase.
Retos adicionales (creados para esta adaptación)
- 🟢 Reto 1: prueba las 6 formas de tortuga y 5 colores distintos.
- 🟡 Reto 2: encuentra en la documentación cómo cambiar el color de fondo de la ventana y el título.
- 🟠 Reto 3: encuentra la diferencia entre
color,pencoloryfillcolor. Dibuja una figura rellena conbegin_fillyend_fill. - 🔴 Reto 4: investiga en la documentación el sistema de coordenadas: ¿dónde está el punto (0, 0)? Usa
goto(x, y)para dibujar las letras de las iniciales de tu colegio.
2. Formas de importar, alias, paquetes y entornos virtuales
(Fuente: 130 - Importing Modules, Installing Packages, and Working with Aliases.md)
📖 Explicación conceptual
| Forma | Ejemplo | Cuándo usarla (según el curso) |
|---|---|---|
import modulo |
import turtle y luego turtle.Turtle() |
Si usas el módulo una o dos veces. Es la forma más clara sobre el origen de cada cosa |
from modulo import cosa |
from turtle import Turtle y luego Turtle() |
Si usas esa cosa muchas veces (más de tres) |
from modulo import * |
from random import * y luego choice(...) |
Evitarla: no se sabe de dónde viene cada función. Conócela para reconocerla en código ajeno |
import modulo as alias |
import turtle as t y luego t.Turtle() |
Cuando el nombre del módulo es largo |
Biblioteca estándar frente a paquetes. turtle viene en la biblioteca estándar de Python: una "biblioteca familiar", pequeña pero siempre disponible. Otros módulos deben instalarse desde PyPI (Día 16). Si no están instalados, aparece ModuleNotFoundError: No module named '...'. El curso lo muestra con los paquetes de ejemplo heroes y villains, que generan nombres de héroes y villanos.
Entornos virtuales (.venv). Los paquetes se instalan por proyecto, no en todo el computador. PyCharm crea un entorno virtual para cada proyecto nuevo. Por eso, un paquete instalado en el proyecto del Día 18 no aparece en un proyecto nuevo.
🛠️ Nota técnica:
- El curso explica la existencia de los entornos virtuales sobre todo por la transición de Python 2 a Python 3. Ese es un motivo histórico, pero hoy la razón principal es aislar las versiones de los paquetes de cada proyecto para que no entren en conflicto. Python 2 dejó de recibir soporte en 2020.
- Sobre
pip: el riesgo que menciona el curso es real (instalar en el entorno equivocado). Se evita usando la terminal de PyCharm, que ya activa el entorno del proyecto, o ejecutandopython -m pip install paquetecon el Python de ese entorno.
Retos adicionales (creados para esta adaptación)
- 🟢 Reto 1: reescribe un programa de Turtle con cada una de las 4 formas de importar y compara su legibilidad.
- 🟡 Reto 2: provoca un
ModuleNotFoundErrorcon un paquete que no tengas y luego instálalo. - 🟠 Reto 3: busca en tu proyecto la carpeta
.venvy encuentra dónde quedó instalado un paquete. - 🔴 Reto 4: investiga qué es un archivo
requirements.txty cómo se genera conpip freeze. ¿Para qué le serviría a un compañero que quiere ejecutar tu proyecto?
3. Retos de Turtle 1 a 3
(Fuentes: 129 - Turtle Challenge 1 - Draw a Square.md, 131 - Turtle Challenge 2 - Draw a Dashed Line.md, 132 - Turtle Challenge 3 - Drawing Different Shapes.md)
📝 Ejercicio original del curso 1: dibujar un cuadrado de 100 × 100
Estrategia: avanzar 100 y girar 90°, cuatro veces. Primero en 8 líneas y luego con for _ in range(4):.
Atajo del curso: para renombrar una variable en todo el archivo (por ejemplo,
timmy_the_turtle→tim), usa en PyCharm Refactor → Rename.
📝 Ejercicio original del curso 2: línea punteada
Enunciado: alternar 10 pasos dibujando y 10 pasos sin dibujar.
Pista de la documentación: penup() levanta el lápiz y pendown() lo baja.
Solución del curso: un for que repite forward(10), penup(), forward(10) y pendown().
🛠️ Nota: en el enunciado el curso dice "repetir 50 veces", pero la solución usa
range(15). Como aclara la lección, el número exacto de repeticiones no importa. Lo que importa es alternar entre dibujar y no dibujar.
El curso aprecia las soluciones creativas (como dibujar en blanco), pero el objetivo era encontrar en la documentación el método adecuado.
📝 Ejercicio original del curso 3: polígonos del triángulo al decágono
Enunciado: dibujar, superpuestos, un triángulo, un cuadrado, un pentágono… hasta un decágono, con lados de 100 y cada figura de un color aleatorio.
La clave matemática: la tortuga debe girar en total 360° para cerrar la figura, así que en cada esquina gira 360 / número de lados.
| Figura | Lados | Giro en cada esquina (360 / n) |
|---|---|---|
| Triángulo | 3 | 120° |
| Cuadrado | 4 | 90° |
| Pentágono | 5 | 72° |
| Hexágono | 6 | 60° |
🛠️ Nota técnica (verificada): el curso dice que "cada esquina de un pentágono tiene 72°". En realidad, 72° es el ángulo que gira la tortuga (el ángulo exterior). El ángulo interior del pentágono es 180° − 72° = 108°. El código es correcto; solo hay que precisar el término.
Estructura de la solución del curso:
- Una función
draw_shape(num_sides)que calcula el ángulo una vez y repiteforward(100)yright(angle)tantas veces como lados tenga la figura. for shape_side_n in range(3, 11):(hasta el 11 para incluir el 10) que cambia el color conrandom.choice(colours)y llamadraw_shape.- La lista de colores sale de una paleta en línea (el curso usa la de Trinket) o de la lista de colores de Tk.
Retos adicionales (creados para esta adaptación)
- 🟢 Reto 1: dibuja un triángulo, un cuadrado y un pentágono rellenos de colores distintos.
- 🟡 Reto 2: haz una línea punteada en la que los segmentos se vuelvan más largos cada vez.
- 🟠 Reto 3: dibuja un polígono de 36 lados muy pequeños. ¿A qué se parece? Explica por qué.
- 🔴 Reto 4: dibuja una estrella de 5 puntas (ángulo de 144°) y una de 7 puntas. Deduce una fórmula para el ángulo de una estrella de n puntas y verifícala.
4. Reto 4: la caminata aleatoria
(Fuente: 133 - Turtle Challenge 4 - Generate a Random Walk.md)
📖 Explicación conceptual
Una caminata aleatoria (random walk) es una sucesión de pasos en direcciones al azar. Se usa para modelar fenómenos reales: el movimiento de una molécula en un líquido o un gas, un animal buscando comida, las finanzas de un jugador de azar e incluso investigaciones sobre el cerebro. El curso recomienda el artículo de Wikipedia sobre el tema.
📝 Ejercicio original del curso
Enunciado: hacer que la tortuga dé 200 pasos de 30 unidades, cada uno en una dirección aleatoria entre Este, Norte, Oeste y Sur, con colores aleatorios, líneas gruesas y dibujo rápido.
Métodos que se buscan en la documentación:
| Necesidad | Método |
|---|---|
| Mirar hacia una dirección exacta | setheading(angulo): 0 = Este, 90 = Norte, 180 = Oeste, 270 = Sur |
| Líneas más gruesas | pensize(15) (o width) |
| Dibujar más rápido | speed("fastest") (también se aceptan "fast", "normal", "slow", "slowest" o números) |
Estructura: directions = [0, 90, 180, 270] y un bucle que cambia el color, avanza 30 y aplica setheading(random.choice(directions)).
Retos adicionales (creados para esta adaptación)
- 🟢 Reto 1: cuenta cuántas veces se eligió cada dirección y muéstralo al final en la consola.
- 🟡 Reto 2: permite 8 direcciones (cada 45°).
- 🟠 Reto 3: evita que la tortuga se salga de la ventana. Si
abs(tim.xcor())oabs(tim.ycor())supera un límite, hazla volver al centro conhome(). - 🔴 Reto 4: mide qué tan lejos del origen termina la tortuga después de 100, 400 y 1600 pasos, repitiendo cada experimento 5 veces (
tim.distance(0, 0)). ¿La distancia promedio crece de forma proporcional al número de pasos? Investiga qué dice la matemática de las caminatas aleatorias.
5. Tuplas y colores RGB aleatorios
(Fuente: 134 - Python Tuples and How to Generate Random RGB Colours.md)
📖 Explicación conceptual
Tuplas. Se parecen a las listas: tienen un orden y se accede a sus elementos por índice. Pero se escriben con paréntesis y son inmutables, es decir, no se pueden cambiar después de creadas.
my_tuple = (1, 3, 8)
print(my_tuple[2]) # 8
my_tuple[2] = 12 # ❌ TypeError: 'tuple' object does not support item assignment (verificado)
list(my_tuple) # [1, 3, 8] → si necesitas modificarla, conviértela en lista¿Cuándo usar una tupla? Cuando los datos no deben cambiar, como la paleta de colores de un sitio web o, en este caso, un color.
Colores RGB. Todo color se forma mezclando Rojo, Verde (G) y Azul (B), cada uno con un valor de 0 a 255. El negro es (0, 0, 0) y el blanco (255, 255, 255). El curso recomienda un "calculador RGB" en línea para experimentar con las mezclas.
En Turtle hay que cambiar el modo de color del módulo, no del objeto tortuga:
import turtle as t
import random
t.colormode(255)
def random_color():
r = random.randint(0, 255)
g = random.randint(0, 255)
b = random.randint(0, 255)
return (r, g, b)
tim = t.Turtle()
tim.color(random_color())Detalle del curso: si dentro de la función guardas el resultado en una variable llamada
random_color, igual que la función, el editor advierte. Usa otro nombre, comocolor.
Retos adicionales (creados para esta adaptación)
- 🟢 Reto 1: crea una tupla con los 3 colores de la bandera de Colombia en RGB. Busca los valores en internet y cita la fuente.
- 🟡 Reto 2: escribe
random_pastel(), que devuelva colores claros (cada valor entre 150 y 255). - 🟠 Reto 3: escribe
mezclar(c1, c2), que reciba dos tuplas y devuelva el color promedio. - 🔴 Reto 4: investiga el formato hexadecimal de los colores (
#FF0000) y escribea_hex(color)para convertir una tupla RGB a ese formato. (Pista:f"{255:02X}".)
6. Reto 5: el espirógrafo
(Fuente: 135 - Turtle Challenge 5 - Draw a Spirograph.md)
📝 Ejercicio original del curso
Enunciado: dibujar muchos círculos de radio 100, cada uno de un color aleatorio y girando un poco la dirección entre uno y otro, hasta completar la figura de un espirógrafo, como el juguete de engranajes.
Métodos que se buscan en la documentación: circle(radio), heading() (para leer la dirección actual) y setheading(angulo).
Cómo llega el curso a la solución:
- Dibujar un círculo.
- Girar un poco (
setheading(tim.heading() + 10)) y dibujar otro. - Repetir en un bucle… y descubrir que, con un número fijo de repeticiones, se dibujan círculos encima de otros.
- Calcular cuántos círculos hacen falta:
360 / tamaño_del_espacio. - Encontrar un error:
range(360 / 5)produceTypeError: 'float' object cannot be interpreted as an integer, porque la división/siempre devuelve unfloat(Día 2). Solución del curso:int(360 / size_of_gap).
Mejora:
360 // size_of_gap(la división entera del Día 2) da directamente un entero. Además, si el tamaño del espacio no divide exactamente a 360 (por ejemplo, 7 → 360/7 ≈ 51.43, verificado), la figura no queda perfectamente cerrada. Elige divisores de 360: 5, 10, 12, 15…
Retos adicionales (creados para esta adaptación)
- 🟢 Reto 1: prueba tamaños de espacio de 5, 10, 20 y 45. ¿Qué cambia?
- 🟡 Reto 2: haz que el radio también cambie en cada círculo.
- 🟠 Reto 3: en lugar de círculos, repite cuadrados girados (reutiliza tu
draw_shapedel Reto 3). - 🔴 Reto 4: escribe
draw_spirograph(size_of_gap, radio, figura), dondefigurasea"circulo"o el número de lados de un polígono. Documenta la función con un docstring.
7. 🚀 Proyecto del día: la Pintura de Puntos estilo Hirst
(Fuentes: 136 - The Hirst Painting Project Part 1 - How to Extract RGB Values from Images.md, 137 - The Hirst Painting Project Part 2 - Drawing the Dots.md, proyecto oficial del curso original)
Contexto: el debate sobre el arte contemporáneo
El curso cuenta varias anécdotas:
- Una instalación de Goldschmied y Chiari (¿Dónde vamos a bailar esta noche?), hecha con botellas y colillas, fue tirada a la basura por el personal de limpieza del museo, que la confundió con desechos.
- El libro El tiburón de 12 millones de dólares, sobre la economía del arte contemporáneo.
- Las obras de Damien Hirst: un tiburón en formol, una calavera con diamantes y las pinturas de puntos, que según el curso se han vendido por cifras millonarias.
💡 Para discutir en clase: ¿qué hace que algo sea "arte"? Si un programa puede generar pinturas de puntos, ¿el arte está en la obra, en la idea o en el artista? (Buen tema para trabajar con el área de Artes.)
Parte 1: extraer la paleta de colores de una imagen
Herramienta: el paquete colorgram, que extrae los colores más frecuentes de una imagen.
🛠️ Nota técnica (verificada): en PyPI, el paquete se llama
colorgram.py(con ".py" en el nombre), aunque en el código se importa comoimport colorgram. Para instalarlo: en PyCharm, busca "colorgram"; en la terminal,pip install colorgram.py. Instala también la librería de imágenes Pillow como dependencia.
📝 Ejercicio original del curso: obtener una lista de tuplas RGB
- Descarga una imagen de una pintura de puntos, guárdala como
image.jpgen la misma carpeta quemain.py. - Extrae 30 colores con
colorgram.extract("image.jpg", 30). - Cada color extraído es un objeto con el atributo
rgb, que a su vez tiene los atributosr,gyb. Construye una lista de tuplas(r, g, b), el formato que usa Turtle. - Revisa la lista y elimina los tonos casi blancos (valores cercanos a 255): son el fondo de la imagen.
- Copia la lista resultante como
color_listen tu programa y comenta el código de extracción, porque no hace falta repetirla cada vez.
Resultado de la verificación (imagen de prueba con 3 círculos: rojo (200, 30, 40), azul (30, 120, 200) y amarillo (240, 200, 20) sobre fondo blanco):
[(254, 254, 250), (30, 119, 196), (198, 31, 40), (239, 199, 23), (247, 254, 253), (254, 250, 253)]El primero y los dos últimos son tonos de blanco del fondo que hay que eliminar. Los otros tres corresponden, con pequeñas diferencias por la compresión JPG, a los colores originales.
Sugerencia de esta adaptación: en lugar de una obra de Hirst, puedes extraer la paleta de una foto propia: el uniforme del colegio, un paisaje de tu región o un plato típico. La obra final será aún más "tuya".
Parte 2: dibujar los puntos
Requisitos del curso: una cuadrícula de 10 × 10 puntos, cada punto de tamaño 20, separados unos 50 pasos, con colores al azar de color_list.
🔍 Antes de programar
- ¿Qué método de la documentación dibuja un punto sin tener que hacer un círculo? (Pista:
dot(tamaño, color).) - ¿Cómo evitas que la tortuga dibuje líneas entre los puntos?
- ¿Dónde debe empezar la tortuga para que la cuadrícula quede centrada?
- Después de cada 10 puntos, ¿cómo "salta" a la fila siguiente? (Pista:
%, Día 3.)
Construcción paso a paso (siguiendo la solución del curso):
import turtle as t,t.colormode(255), creartimyscreen.exitonclick()al final.- Dibujar un punto con
tim.dot(20, random.choice(color_list)). - Un bucle de 10 puntos:
doty luegoforward(50). El curso observa que la tortuga se sale de la ventana y además deja líneas. - Punto de inicio (el curso lo encuentra experimentando):
setheading(225)(hacia abajo y a la izquierda), avanzar unos 300 y luegosetheading(0). - Cambiar de fila: si
dot_count % 10 == 0, hacersetheading(90),forward(50),setheading(180),forward(500)ysetheading(0). - El error del punto número 100:
range(1, number_of_dots)dibuja solo 99 puntos. Se corrige conrange(1, number_of_dots + 1). Es el desfase por uno del Día 5. - Acabados:
penup()para no dibujar líneas,hideturtle()para que no se vea la flecha (según la documentación, además acelera el dibujo) yspeed("fastest").
"Es a través de estos cambios paso a paso que realmente entiendes lo que hace tu código": el curso deja las líneas visibles mientras desarrolla, para ver el recorrido de la tortuga, y las quita al final.
Pruebas
| Verificación | Cómo comprobarla |
|---|---|
| 100 puntos exactos | Cuenta las filas y columnas en la pantalla; o agrega un contador e imprímelo |
| Sin líneas entre puntos | penup() antes de moverse |
| Sin fondo blanco en la paleta | Revisa que ninguna tupla tenga los tres valores por encima de ~240 |
| La cuadrícula cabe en la ventana | Si se corta, ajusta la distancia inicial o el tamaño de la ventana (screen.setup) |
🧪 Prueba y depuración
Este código tiene tres errores y deja una pregunta para analizar:
import turtle as t
import random
color_list = [(202, 164, 110), (149, 75, 50), (222, 201, 136)]
tim = t.Turtle()
tim.speed("fastest")
tim.hideturtle()
tim.setheading(225)
tim.forward(300)
tim.setheading(0)
for dot_count in range(1, 100):
tim.dot(20, random.choice(color_list))
tim.forward(50)
if dot_count % 10 == 0:
tim.setheading(90)
tim.forward(50)
tim.setheading(180)
tim.forward(500)
tim.setheading(0)
screen = t.Screen()
screen.exitonclick()(Pistas de los errores: un modo de color que falta, porque sin t.colormode(255) Turtle rechaza las tuplas con valores mayores que 1; un desfase por uno; y un lápiz que sigue abajo. La pregunta: la ventana se crea después del bucle, ¿aun así se ve el dibujo mientras se hace? Explica por qué funciona.)
⭐ Extensión del proyecto
- Tamaños de punto aleatorios entre 10 y 30.
- Una cuadrícula de N × M configurable, con los parámetros de una función.
- Guardar la imagen: investiga
screen.getcanvas().postscript(file="obra.eps").
8. 🌟 Proyecto extra: Mandala con los Colores de Colombia
Situación
Para la semana cultural, el área de Artes y la de Tecnología proponen crear mandalas digitales con Turtle.
Requisitos
- Una tupla de paletas: cada paleta es una tupla de colores RGB. Por ejemplo, la bandera de Colombia (con la fuente de los valores citada) y los colores de un paisaje de tu región (extraídos con colorgram de una foto propia).
- Funciones reutilizables con parámetros:
petalo(tortuga, tamaño, color): dibuja un pétalo con dos arcos (circle(radio, extent)).anillo(tortuga, n_petalos, tamaño, paleta): dibuja n pétalos girando360 / n.
- El mandala tiene al menos 3 anillos concéntricos, de tamaños distintos, y un punto central con
dot. - El usuario elige la paleta con
screen.textinput(...), un cuadro de diálogo de Turtle que debes buscar en la documentación. hideturtle()yspeed("fastest")para el resultado final.
Reflexión
¿Qué partes de tu código reutilizaste del espirógrafo y de los polígonos? ¿Cómo te ayudaron las funciones con parámetros?
9. 🏆 Proyecto integrador del Día 18: Galería de Arte Generativo del Curso
Proyecto integrador creado para esta adaptación. Integra Turtle y la documentación (Día 18), las clases propias (Día 17), el uso de paquetes (Días 16 y 18), las tuplas,
randomy la validación de entradas.
Situación problema
El curso quiere montar una galería de arte generativo para la feria de tecnología: un programa que, a partir de la foto que elija cada estudiante, produzca tres obras distintas con la paleta de esa foto.
Pregunta orientadora
¿Cómo combinar paquetes externos, clases propias y la documentación para construir una herramienta creativa y reutilizable?
Requerimientos
- Una clase
Paleta:__init__(self, ruta_imagen, n_colores)extrae los colores con colorgram y filtra los tonos casi blancos (define el criterio como una constante).- Método
color_aleatorio()que devuelve una tupla. - Método
resumen()que devuelve un texto con la cantidad de colores y los tres primeros.
- Una clase
Artistaque recibe unaPaletay crea su propia tortuga, con los métodos:pintura_puntos(filas, columnas, tamaño, separacion)espirografo(espacio)caminata(pasos)
- Un programa principal con un menú (
screen.textinput) para elegir la obra y validar la opción. Al terminar cada obra, se limpia la pantalla (investigaclear()oreset()). - Manejar el caso de una imagen que no existe (
FileNotFoundError) contry/except(Día 13) y mostrar un mensaje claro. - Todas las clases y métodos con docstring. Sin variables globales modificables.
Entregables
- El código, con al menos dos archivos de clases y un
main.py. - La foto original y capturas de las tres obras.
- Un
requirements.txtcon los paquetes necesarios (Reto 4 del Tema 2). - Una "ficha de museo" de tu obra favorita: título, técnica ("Python + Turtle") y una descripción de 3 líneas.
Criterios técnicos
- El programa funciona en el computador de un compañero siguiendo tu
requirements.txt. - La paleta nunca contiene el fondo blanco.
- Cambiar la foto no exige modificar ninguna clase.
10. 🤖 Programar con apoyo de IA
El curso insiste hoy en que la habilidad clave es leer la documentación: "no siempre podemos confiar en que otros nos digan qué hacer; tenemos que obtenerlo de la fuente". Una IA es uno de esos "otros".
Actividad: la IA frente a la documentación.
- Pide a una IA el código de la pintura de puntos.
- Para cada método de Turtle que use, búscalo en la documentación oficial (se abre en otra pestaña) y escribe qué hace y qué parámetros recibe.
- ¿Usó algún método que no existe o con parámetros equivocados? ¿Olvidó
colormode(255)? - Pregúntale cómo instalar colorgram. ¿Te dio el nombre correcto del paquete (
colorgram.py)?
11. 🛠️ Correcciones técnicas al material original
| Archivo | Afirmación o comportamiento del curso | Observación | Tratamiento |
|---|---|---|---|
132 |
"Cada esquina de un pentágono tiene 72°" | 72° es el ángulo exterior (lo que gira la tortuga); el interior es 108° (verificado) | Nota técnica del Tema 3 |
136 |
Instalar "colorgram" | En PyPI se llama colorgram.py; se importa como colorgram (verificado) |
Nota técnica del proyecto |
130 |
Los entornos virtuales existen principalmente por Python 2 frente a 3 | Hoy su función principal es aislar las versiones de los paquetes de cada proyecto; Python 2 terminó su soporte en 2020 | Nota técnica del Tema 2 |
128 |
El Apple Lisa fue "la primera computadora con interfaz gráfica" | Fue de las primeras comerciales; el Xerox Alto (1973) es anterior | Nota técnica del Tema 1 |
131 |
"Repetir 50 veces" y luego range(15) |
Inconsistencia menor; el número no importa | Nota en el Tema 3 |
135 |
int(360 / size_of_gap) |
Funciona; 360 // size_of_gap es más directo, y con espacios que no dividen a 360 la figura no cierra |
Nota en el Tema 6 |
12. 📋 Matriz de trazabilidad
| Contenido original | Archivo de origen | Concepto desarrollado | Ejercicio original | Reto adicional | Proyecto relacionado |
|---|---|---|---|---|---|
| Objetivos: pintura de Hirst | 127 |
Sección 0 | — | — | Sección 7 |
| Turtle, documentación, Tk, GUI | 128 |
Tema 1 | Forma, color, forward, right |
Retos 1–4 del Tema 1 | Todos |
| Cuadrado | 129 |
Tema 3 | Cuadrado de 100 × 100 | Retos del Tema 3 | Secciones 8 y 9 |
Formas de importar, alias, paquetes, .venv |
130 |
Tema 2 | Ejemplo con heroes |
Retos 1–4 del Tema 2 (requirements.txt) |
Sección 9 |
| Línea punteada | 131 |
Tema 3 | penup/pendown |
Reto 2 del Tema 3 | Sección 7 |
| Polígonos de 3 a 10 lados | 132 |
Tema 3 | draw_shape con colores aleatorios |
Retos 3–4 del Tema 3 (estrellas) | Secciones 8 y 9 |
| Caminata aleatoria | 133 |
Tema 4 | setheading, pensize, speed |
Retos 1–4 del Tema 4 | Sección 9 |
Tuplas, RGB, colormode |
134 |
Tema 5 | random_color() |
Retos 1–4 del Tema 5 | Secciones 7, 8 y 9 |
| Espirógrafo | 135 |
Tema 6 | draw_spirograph(size_of_gap) |
Retos 1–4 del Tema 6 | Secciones 8 y 9 |
| Extraer la paleta con colorgram | 136 |
Sección 7, parte 1 | Lista de tuplas sin blancos | Paleta de una foto propia | Sección 9 |
| Dibujar la cuadrícula de puntos | 137 |
Sección 7, parte 2 | Pintura de 10 × 10 | Depuración y extensiones | Sección 9 |
| Constancia (gimnasio) | 138 |
Sección 0 | — | — | — |
| (No existe en el curso original) | — | — | — | Mandala con los Colores de Colombia | Sección 8 |
| (No existe en el curso original) | — | — | — | Galería de Arte Generativo | Sección 9 |
13. 📦 Evidencias de aprendizaje del Día 18
- Capturas de los 5 retos de Turtle: cuadrado, línea punteada, polígonos, caminata y espirógrafo.
- Pintura de puntos con su paleta extraída (idealmente de una foto propia) y la lista de colores sin blancos.
- Explicación escrita del ángulo exterior frente al interior y del desfase por uno del punto número 100.
- Proyecto extra (Mandala) o integrador (Galería), con su ficha de museo.
- Cuaderno de errores:
TypeErroral modificar una tupla,TypeErroral usar unfloatenrange,ModuleNotFoundError, el nombre del paquetecolorgram.pyy la ventana que se cierra sinexitonclick().