Vai al contenuto

Disegnare con turtle

In questa lezione impari a

  • muovere la tartaruga e disegnare forme
  • controllare penna, spessore e colori
  • usare i cicli per disegnare in meno righe
  • usare le liste per descrivere un disegno

Il modulo turtle ti dà una tartaruga che si muove su un foglio e lascia una scia dove passa. È un modo divertente per vedere subito il risultato del codice e per esercitarsi con cicli e liste.

Turtle apre una finestra grafica, quindi serve Python installato sul computer: gli editor online di solito non la supportano.

Il foglio e la tartaruga

import turtle

t = turtle.Turtle()
t.shape("turtle")

t.forward(100)   # avanti di 100 passi
t.left(90)       # gira a sinistra di 90 gradi
t.forward(100)

turtle.done()    # tiene aperta la finestra

La tartaruga parte dal centro del foglio, che ha coordinate (0, 0), guardando verso destra.

I comandi principali

Comando Cosa fa
forward(n) / backward(n) avanti / indietro di n passi
left(g) / right(g) gira a sinistra / destra di g gradi
goto(x, y) va al punto (x, y)
penup() / pendown() alza / abbassa la penna (si muove senza disegnare)
pensize(n) spessore della linea
color("red") colore della penna
circle(r) disegna un cerchio di raggio r
dot(d, "blue") disegna un pallino pieno
begin_fill() / end_fill() riempie la forma disegnata in mezzo
speed(0) velocità massima

Il quadrato, prima e dopo il ciclo

Senza ciclo servono 8 righe:

t.forward(100)
t.left(90)
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)
t.forward(100)
t.left(90)

Con il ciclo bastano 3 righe, e cambiando un numero ottieni altre figure:

for i in range(4):
    t.forward(100)
    t.left(90)

Per un poligono con n lati, l'angolo da girare è 360 / n.

Colori e riempimenti

import turtle

t = turtle.Turtle()
t.color("darkgreen", "lightgreen")   # colore del bordo e del riempimento
t.begin_fill()
for i in range(6):
    t.forward(80)
    t.left(60)
t.end_fill()
turtle.done()

Disegnare con le liste

Una lista di colori, scorsa con il for, rende i disegni molto più ricchi:

import turtle

t = turtle.Turtle()
t.speed(0)
colori = ["red", "orange", "yellow", "green", "blue", "purple"]

for i in range(36):
    t.color(colori[i % len(colori)])
    t.circle(80)
    t.left(10)

turtle.done()

i % len(colori) fa ripartire i colori dall'inizio quando sono finiti.

Esercizi

Esercizio 1 – Il poligono a scelta. Chiedi all'utente il numero di lati e disegna il poligono regolare corrispondente.

Mostra la soluzione
import turtle

lati = int(input("Quanti lati? "))
t = turtle.Turtle()
for i in range(lati):
    t.forward(80)
    t.left(360 / lati)
turtle.done()

Esercizio 2 – La stella. Disegna una stella a cinque punte riempita di giallo. Suggerimento: l'angolo da girare è 144 gradi.

Mostra la soluzione
import turtle

t = turtle.Turtle()
t.color("orange", "yellow")
t.begin_fill()
for i in range(5):
    t.forward(150)
    t.right(144)
t.end_fill()
turtle.done()

Esercizio 3 – La casetta. Disegna una casa: un quadrato per i muri, un triangolo per il tetto e un rettangolo per la porta, ciascuno con il suo colore.

Mostra la soluzione
import turtle

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

def rettangolo(x, y, larghezza, altezza, colore):
    t.penup()
    t.goto(x, y)
    t.pendown()
    t.color("black", colore)
    t.begin_fill()
    for i in range(2):
        t.forward(larghezza)
        t.left(90)
        t.forward(altezza)
        t.left(90)
    t.end_fill()

rettangolo(-100, -100, 200, 200, "beige")     # muri
rettangolo(-25, -100, 50, 90, "brown")        # porta

# tetto
t.penup()
t.goto(-120, 100)
t.pendown()
t.color("black", "firebrick")
t.begin_fill()
t.goto(0, 200)
t.goto(120, 100)
t.goto(-120, 100)
t.end_fill()

turtle.done()

Qui compare def, che serve a creare una funzione: ne parliamo nella prossima lezione. Intanto nota quanto codice si risparmia disegnando muri e porta con la stessa funzione.

Sfida

Disegna un fiore arcobaleno: sei petali (cerchi) di colori diversi presi da una lista, con un pallino giallo al centro.