Dibujar con código:
la tortuga de Python

1. ¿Qué es la tortuga?

Turtle quiere decir tortuga en inglés. Viene de Logo, un lenguaje que unos maestros inventaron para enseñar a programar. La idea detrás es que aprendemos mejor un concepto abstracto cuando lo podemos mover con el cuerpo. Tú no piensas "un ángulo de 170 grados": piensas "yo camino, yo giro". La tortuga es tu cuerpo puesto en la pantalla.

Por eso no dibujamos nosotros. Le decimos a la tortuga: "avanza 80", "gira 170 grados"; así el dibujo aparece por donde pasó la tortuga.

La tortuga les salió tan bien que otros lenguajes la fueron adoptando. Uno de ellos es Python: un idioma para darle instrucciones a la computadora, hoy de los más usados en el mundo, y el que vamos a usar aquí.

Python trae guardados un montón de paquetes de herramientas. A esos paquetes se les dice módulos, y la tortuga es uno de ellos.

Python no los carga todos de un jalón, porque serían miles y nomás estorbarían. Se los tienes que pedir, y por eso la primera línea de tus programas es import turtle, que quiere decir "tráeme el módulo de la tortuga".

Cómo leer los colores de este cuadernillo

El código de aquí viene pintado. Cada color quiere decir algo:

Antes de empezar

2. Las tres líneas que siempre van

import turtle              # trae la tortuga a tu programa
t = turtle.Turtle()        # nace tu tortuga y se llama t
t.speed(0)                 # que camine lo más rápido posible

Qué hace cada una

import turtleTrae la caja de herramientas de la tortuga. Sin esta línea, Python no sabe qué es una tortuga.
t = turtle.Turtle()Crea una tortuga y la guarda en una caja llamada t. Cada vez que escribas t, te refieres a ella. Le podrías poner tortuga o chelo, mientras uses el mismo nombre siempre.
t.speed(0)La velocidad. Del 1, que es lentísima, al 10, que es rápida. El 0 quiere decir sin animación, o sea lo más rápido de todo. Mientras aprendes, ponle 1 y mírala caminar.

Y hasta abajo de todo programa va esta línea:

turtle.done()              # deja la ventana abierta

Sin ella, la ventana se cierra en un parpadeo y no alcanzas a ver nada.

3. Diccionario de comandos

t.forward(80)Avanza 80 pasos hacia donde esté viendo.
t.backward(40)Retrocede 40 pasos, sin voltearse.
t.right(90)Gira 90 grados a la derecha, en su lugar.
t.left(45)Gira 45 grados a la izquierda, en su lugar.
t.penup()Levanta la pluma. Camina pero ya no deja rastro.
t.pendown()Baja la pluma. Vuelve a dibujar.
t.pencolor("purple")Cambia el color de la línea.
t.pensize(4)Cambia el grosor de la línea.
t.circle(30)Dibuja un círculo de radio 30.
t.goto(0, 0)Se va directo a una coordenada. El (0, 0) es el centro.
t.home()Regresa al centro viendo a la derecha.
t.hideturtle()Esconde la flechita para que solo se vea el dibujo.

Colores que puedes escribir tal cual, siempre entre comillas: "purple", "green", "red", "blue", "orange", "brown", "black", "pink", "gold", "turquoise".

4. Ejemplo 1: la estrella que se cierra sola

import turtle

t = turtle.Turtle()
t.speed(0)

for i in range(36):        # repite 36 veces lo de abajo
    t.forward(80)          # avanza 80
    t.right(170)           # gira 170 grados a la derecha

turtle.done()

Línea por línea

for i in range(36):Esto es un ciclo: repite 36 veces lo que viene abajo. La i es un contador que lleva la cuenta: 0, 1, 2, hasta 35. Los dos puntos del final avisan que ahí empieza lo que se repite.
t.forward(80)Avanza 80. Está adentro del ciclo, así que pasa 36 veces.
t.right(170)Gira 170 grados. También pasa 36 veces.

¿Por qué sale una estrella y no un cuadrado?

Aquí está lo bonito. Al girar 170 grados casi te regresas por donde venías, pero no del todo: te faltan 10 grados. Ese pedacito que sobra hace que la figura no cierre luego luego, sino que se vaya abriendo en picos.

Haz la cuenta: 36 giros por 170 grados son 6120 grados. Y 6120 entre 360 da 17 vueltas exactas. Como sale número entero, la tortuga termina justo donde empezó y la figura cierra perfecto. Si no diera entero, el dibujo quedaría abierto.

Experimenta con este

170 por 144Sale la estrella de cinco picos de toda la vida.
170 por 90Sale un cuadrado, repetido encima de sí mismo.
170 por 175Los picos se hacen más finos. Vas a necesitar más repeticiones.
170 por 91Un cuadrado que se va girando poquito. Sube el 36 a 200 y verás.
80 por 200La misma figura, más grande. Tal vez se salga de la pantalla.

5. Ejemplo 2: cuatro plantas en fila

import turtle

t = turtle.Turtle()
t.speed(0)

for planta in range(4):        # cuatro plantas
    for hoja in range(6):      # seis hojas en cada planta
        t.forward(40)          # sale la hoja
        t.backward(40)         # y se regresa al centro
        t.right(60)            # gira para la siguiente hoja
    t.penup()                  # levanta la pluma
    t.forward(60)              # brinca al lugar de la otra planta
    t.pendown()                # baja la pluma otra vez

turtle.done()

Un ciclo adentro de otro ciclo

Este ejemplo tiene dos ciclos, uno metido dentro del otro. El de afuera cuenta plantas. El de adentro cuenta hojas. Por cada planta se dibujan seis hojas. Cuatro por seis dan 24 hojas en total.

for planta in range(4):Ciclo de afuera. Se repite cuatro veces, una por planta.
for hoja in range(6):Ciclo de adentro. Por cada planta, esto corre seis veces.
t.forward(40)
t.backward(40)
Sale y regresa por la misma línea. Así se dibuja un rayo que sale del centro, como una hoja.
t.right(60)Gira 60 grados para poner la siguiente hoja. Seis hojas por 60 grados dan 360, la vuelta completa. Por eso la planta queda como abanico cerrado.
t.penup()
t.forward(60)
t.pendown()
Estas tres ya salieron del ciclo de las hojas. Levantan la pluma, se mueven 60 de lado sin dibujar y la vuelven a bajar. Es el brinco al lugar de la siguiente planta. Sin el penup, quedaría una raya fea uniendo todo.

La sangría manda

En Python los espacios de la izquierda no son adorno. Son los que dicen quién está adentro de quién. Van cuatro espacios por cada nivel.

Mueve t.penup() a ocho espacios en vez de cuatro y el dibujo cambia por completo. Hazlo a propósito para verlo.

6. Comandos para subirle

Estos no venían en los ejemplos, pero te van a servir para lo tuyo.

Pintar el relleno

t.fillcolor("green")       # el color de adentro
t.begin_fill()             # aquí empieza el relleno

for lado in range(6):
    t.forward(60)
    t.right(60)

t.end_fill()               # aquí se pinta

Todo lo que dibujes entre esas dos líneas se rellena de color cuando la figura cierra.

Cambiar el fondo

turtle.bgcolor("black")    # el fondo de la ventana
t.pencolor("purple")       # el color de la línea

Colores que van cambiando solos

colores = ["purple", "green", "blue", "orange", "red", "gold"]

for i in range(36):
    t.pencolor(colores[i % 6])   # agarra el siguiente color
    t.forward(80)
    t.right(170)

La lista guarda seis colores. El i % 6 saca el residuo de dividir entre 6, así que va dando 0, 1, 2, 3, 4, 5, y de vuelta al 0. Cada repetición agarra el que sigue.

Que crezca en cada vuelta

for i in range(60):
    t.forward(i * 3)       # cada paso más largo que el anterior
    t.right(91)

Como i va creciendo, cada paso es más largo. Sale una espiral cuadrada.

Ajustar la ventana a la pantalla chiquita

turtle.setup(width=460, height=300)

Ponla justo después del import. Sirve cuando la pantalla es pequeña y el dibujo no cabe.

7. Si algo falla

IndentationErrorLos espacios de la izquierda no cuadran. Revisa que todo lo del ciclo tenga los mismos cuatro espacios.
SyntaxErrorFalta algo chiquito: los dos puntos al final del for, un paréntesis sin cerrar, una comilla suelta.
NameErrorUsaste un nombre que no existe. Casi siempre es una t escrita de otro modo, o un color sin comillas.
AttributeErrorTu archivo se llama turtle.py. Cámbiale el nombre.
La ventana se cierra solaFalta turtle.done() hasta abajo.
No se ve nadaLa pluma quedó levantada, o el dibujo se salió de la pantalla. Baja los números.

La regla de oro

Cambia un solo número a la vez y vuelve a correr el programa. Si cambias tres cosas juntas y sale algo raro, ya no sabes cuál fue. Así se depura, y así trabaja quien programa todos los días.

8. Tu turno: diseña el tuyo

Antes de escribir código, dibújalo en papel y contesta las preguntas. Es más rápido pensarlo aquí que borrar quince veces en la compu.

¿Qué quiero dibujar?

¿Qué se repite? ¿Cuántas veces?

¿De cuánto es cada paso y cada giro?

¿Hay algo adentro de algo? ¿Qué va en el ciclo de afuera?

Escribe aquí tu código

Retos por si te atoras

La tortuga sabe hacer mucho más de lo que cabe aquí. La lista completa de comandos vive en:
docs.python.org/es/3/library/turtle.html

Notas