Tutorial per imparare a disegnare con Python Turtle

Cosa farai

In questa risorsa compirai i primi passi nella programmazione con il linguaggio Python e inizierai a realizzare forme, pattern, e spirali.
Grazie a questo tutorial potrai imparare a disegnare con Turtle. Imparerai a pensare in termini di sequenze e a usare i loop per ripetere una sequenza.

Cosa imparerai

Costruendo pattern con Python imparerai:

  • le basi del linguaggio di programmazione Python
  • a tracciare linee con Python Turtle
  • a disegnare curve
  • a usare i loop per ripetere istruzioni e creare forme
  • a usare contemporaneamente più loop per creare pattern a forma di spirale
  • a modificare il colore della penna

Usare IDE su Microninja

Un fantastico modo di scrivere e testare codice è quello di usare Thonny Python IDE, un’applicazione di sviluppo per Python.
Lancia Thonny Python IDE da Menu/Coding/Thonny Python IDE.
Si accede al menù facendo clic sull’icona di Microninja in basso a sinistra dello schermo.
Una volta aperta la finestra di Python, avrai a disposizione un editor di testo, dove puoi scrivere, salvare e testare il tuo codice.

Salva subito il tuo file con il nome turtleyamazing.py: fai clic su File e quindi su Save As. Seleziona la cartella .thonny, e scrivi turtleyamazing.py nel campo di testo Nome del file. Fai quindi clic su Salva.

È arte, matematica o informatica?

Osserva l’immagine riprodotta di seguito:
Come la descriveresti? È arte, matematica o informatica?
È un’immagine generata con un computer, ma la sua costruzione richiede una comprensione di arte, di matematica e di informatica.
Vediamo come anche tu puoi disegnare con Python Turtle un’immagine simile.

Disegnare una linea

L’immagine che hai visto prima è fatta solo di righe!
Come prima cosa, devi quindi imparare a tracciare una linea usando Python.

Per iniziare scrivi queste istruzioni:

from turtle import Turtle, Screen
tartaruga = Turtle()
sfondo = Screen()
tartaruga.forward(100)

Fai clic su Run per vedere cosa fa il codice che hai scritto.
Adesso prova a cambiare il numero presente nella riga tartaruga.forward(100), fai un’altra volta clic su Run e osserva cosa succede.

Fare una curva

Hai scritto un programma per disegnare una linea. Bravo!
Adesso proviamo a disegnare una curva. Per farlo, il cursore non deve solamente muoversi in linea retta, ma anche a girare a destra o a sinistra.

Aggiungi al tuo programma le righe:

tartaruga.right(90)
tartaruga.forward(100)

Che cosa pensi che faccia questa istruzione? Fai clic su Run per vedere se avevi ragione.
tartaruga.right(90) fa girare il cursore a destra di 90 gradi.

Allo stesso modo, potresti farlo girare a sinistra con tartaruga.left(90).
Se vuoi farlo ruotare un po’ di più, o di meno, ti basta modificare il valore dell’angolo di rotazione.

Completa il quadrato che hai iniziato a disegnare aggiungendo le righe di codice necessarie. Man mano aggiungi il codice, fai clic su Run per vedere il risultato. Continua a modificarlo finché non funziona correttamente.

Esercizi

Svolgi i seguenti esercizi:

  • Disegna un rettangolo: 2 dei 4 lati devono essere più lunghi.
  • Disegna un triangolo: di quanti gradi deve essere la rotazione?
  • Disegna una croce: andare avanti e indietro è una buona soluzione.
  • Disegna un cerchio

Cambiare i colori

Il colore di default della penna è il nero, e quello dello sfondo è il bianco. Puoi cambiare questi colori per rendere le forme del disegno realizzato con Python Turtle più espressive.

Leggi il programma scritto di seguito. Contiene le tre variabile R, G, e B.

from turtle import Turtle, Screen
tartaruga = Turtle()
sfondo = Screen()

sfondo.colormode(255)

R = 255
G = 255
B = 0

sfondo.bgcolor((R, G, B))

Le variabili sono un modo per salvare un valore e dargli un nome. Ad esempio, la variabile chiamata R ha il valore 255.

colormode(255) definisce uno spazio colore di 255 valori per ogni variabile, uno spazio cioè in cui ciascuna variabile può assumere un valore compreso fra 0 e 255. Di default è impostato a (1).

Lancia il programma e vedi cosa succede.
Cosa pensi rappresentino le variabili R, G, e B?

Puoi anche cambiare il colore con cui disegni. Lancia il programma scritto qui di seguito e vedi cosa succede:

from turtle import Turtle, Screen
turtle = Turtle()
screen = Screen()
sfondo.colormode(255)
R = 255
G = 0
B = 124
tartaruga.color((R, G, B))
tartaruga.forward(100)
tartaruga.right(120)
tartaruga.forward(100)

Esercizi

Svolgi i seguenti esercizi:

  • Completa il triangolo con un colore a tua scelta.
  • Disegna un quadrato con i lati di quattro sfumature di rosso.
  • Disegna una croce di quattro colori diversi.

Ripetizioni

Ripetere righe di codice è uno dei modi più rapidi per scrivere un programma. Spesso è infatti più efficiente ripetere righe di codice piuttosto che scrivere nuove istruzioni. Per esempio, il quadrato che hai creato prima usa la stessa istruzione ripetuta quattro volte, ma avresti potuto scriverla una sola volta e aggiungere un’altra istruzione che dica di ripeterla.

Per ripetere righe di codice si usano i loop.

In Python hai a disposizione due tipi di loop: il loop while e il loop for. Se vuoi che un blocco di codice venga ripetuto per sempre, o fino a che una certa condizione venga soddisfatta, il loop while è con ogni probabilità la scelta migliore. Se invece vuoi che il loop venga eseguito un numero specifico di volte, è meglio usare il loop for.

Nel caso qui di seguito, abbiamo usato il loop while True. Il codice interno al suo interno verrà ripetuto per sempre. Prova a eseguirlo per vedere come funziona, ma ricorda che non si fermerà da solo!

from turtle import Turtle, Screen    

turtle = Turtle()	  

while True:
    turtle.forward(1)
    turtle.right(1)

Nell’esempio che segue, abbiamo invece usato un loop for.

from turtle import Turtle, Screen

tartaruga = Turtle()

sfondo = Screen()
sfondo.colormode(255)

tartaruga.penup()

for i in range(8):
  tartaruga.write(i)
  tartaruga.forward(20)

Copialo, lancialo e vedi cosa succede.
Un loop for ripete le istruzioni un certo numero di volte; in questo caso 8 volte. Al loop for è associata una variabile (che qui abbiamo chiamato i). Nel nostro esempio, i parte da 0 e aumenta di 1 ad ogni ciclo.

Utilizziamo questo loop per disegnare un quadrato:

from turtle import Turtle, Screen

tartaruga = Turtle()

for i in range(4):
  tartaruga.forward(100)
  tartaruga.right(90)

Copia questo codice e premi Run.
Al computer è stato chiesto di ripetere 2 instruzioni 4 volte per disegnare il quadrato.

Una volta creata una forma usando un loop, la puoi ripetere tutte le volte che vuoi inserendola in un altro loop. Questo è un modo fantastico per disegnare spirali.

Modifica il programma in questo modo:

from turtle import Turtle, Screen
tartaruga = Turtle()

for i in range(30):
    for i in range(4):
      tartaruga.forward(100)
      tartaruga.right(90)
    tartaruga.right(25)


La spirale viene disegnata imponendo prima una rotazione e poi un movimento in avanti. Il blocco di codice per disegnare il quadrato è all’interno di un loop for che lo ripete 30 volte, ogni volta volta ruotando il cursore di 25 gradi in modo che alla fine venga creata una piacevole forma a spirale.

Esercizi

Svolgi i seguenti esercizi:

  • Sei in grado di modificare il loop for per creare una spirale ancora più interessante a partire da una delle forme che hai creato prima?
  • Aggiungi alcune righe di codice in cui modifichi le variabili R, G, e B per disegnare una spirale di più colori. Prova a creare una spirale arcobaleno.

Spirali ancora più belle

Prova a leggere il codice scritto di seguito e a indovinare cosa fa.

from turtle import Turtle, Screen

tartaruga = Turtle()
sfondo = Screen()

sfondo.colormode(255)

R = 255
G = 0
B = 0
sfondo.bgcolor((255, 255, 255))

for i in range(2000):
  G += 1
  B += 0.5
  R -= 1
  tartaruga.color((R, G, B))
  
  tartaruga.forward(i)
  tartaruga.right(98)

Copialo, premi Run e vedi se avevi ragione.

Avrai notato che ci vuole moltissimo tempo prima che il programma si concluda. Possiamo accelerare un po’ le cose aggiungendo una linea prima del loop for:

turtle.speed(0)

Lancia di nuovo il programma: dovrebbe essere un po’ più veloce.

Il nostro codice ha creato una spirale multicolore modificando i valori delle variabili R, G, e B. I colori sono comunque un po’ mono dimensionali. Riesci a migliorarlo?

Colori in loop

Per ottenere colori più interessanti, potresti scrivere una lunga lista di colori diversi, e continuare a cambiare i colori pescandoli dalla lista. In Python puoi creare una lista usando le parentesi quadre [ ].
Ecco un esempio di una lista di colori RGB:

colours = [(85, 211, 136), (197, 196, 126), (235, 233, 166), (25, 135, 222), (211, 64, 159), (159, 165, 106), (178, 160, 125), (36, 192, 70), (231, 184, 204), (63, 203, 219)]

Il prossimo passo è un po’ più difficile. Leggi il programma seguente e lancialo per vedere cosa succede.

from turtle import Turtle, Screen

tartaruga = Turtle()
sfondo = Screen()

sfondo.colormode(255)
sfondo.bgcolor((0, 0, 255))

tartaruga.speed(0)

colours = [(85, 211, 136), (197, 196, 126), (235, 233, 166), (25, 135, 222), (211, 64, 159), (159, 165, 106), (178, 160, 125), (36, 192, 70), (231, 184, 204), (63, 203, 219)]

for i in range(10):
  tartaruga.color(colours[i])
  tartaruga.forward(10)

La riga tartaruga.color(colours[i]) dice al programma di scegliere l’“iesimo” elemento nella lista. i va da 0 a 9.

E se volessimo una linea più lunga?
Prova a cambiare il numero di loop scrivendo range(20) e vedi cosa succede.
Hai ottenuto un errore?

Un operatore per risolvere il problema

Nell’esempio precedente, ti serve una maniera per continuare a vagliare in loop gli elementi nella lista, in modo che, quando i arriva a 9, ritorni all’inizio e peschi una seconda volta l’elemento 0 nella lista. È in casi come questo che l’operatore resto % può esserti utile.
Prova a leggere il programma scritto di seguito e a indovinare cosa fa.

print(18 % 6)

Premi Run e vedi se avevi ragione.

Prova a cambiare i numeri nel comando print. Ecco alcuni esempi da provare:

print(12 % 6)
print(6 % 6)
print(0 % 6)
print(13 % 6)
print(17 % 6)
print(1 % 6)
print(8 % 6)
print(11 % 6)

Hai capito cosa fa?
L’operatore % stampa il resto di una divisione. Per esempio, 15 ÷ 6 fa 2 con il resto di 3. Quindi 15 % 6 darebbe 3.

Possiamo usare questo operatore per risolvere il problema descritto in precedenza..

Guarda l’esempio scritto di seguito, e leggi con attenzione il codice per capire come viene utilizzato l’operatore resto.

from turtle import Turtle, Screen

tartaruga = Turtle()
sfondo = Screen()

sfondo.colormode(255)
sfondo.bgcolor((0, 0, 255))

tartaruga.speed(0)

colours = [(85, 211, 136), (197, 196, 126), (235, 233, 166), (25, 135, 222), (211, 64, 159), (159, 165, 106), (178, 160, 125), (36, 192, 70), (231, 184, 204), (63, 203, 219)]

for i in range(2000):
  tartaruga.color(colours[i % len(colours)])
  tartaruga.forward(i)
  tartaruga.right(98)

Liste gigantesche

Ora puoi provare a creare una lista di colori un po’ più lunga rispetto a quella di prima. Per farlo puoi usare un loop while. A differenza di quanto accade con un loop for, un loop while va avanti fino a che non viene soddisfatta una certa condizione.

Guarda il programma scritto di seguito. Il loop while viene usato per aumentare gradualmente il valore di G fino a che raggiunge il valore 255. Ogni volta, i colori vengono aggiunti alla lista.

colours = [ ]
R = 255
G = 0
B = 0
while G < 255:
  colours.append((R, G, B))
  G += 5 
print(colours)


Saresti in grado di aggiungere altri 2 loop while per avere più colori?
Il primo dovrebbe diminuire gradualmente R fino a farle raggiungere il valore 0. Il secondo dovrebbe aumentare B fino a farle raggiungere 255.
Prova, ma non preoccuparti se non ci riesci: come farlo verrà comunque mostrato alla fine di questa risorsa.

In conclusione

Ora sei in grado di usare un loop while insieme al codice per costruire una spirale.

Leggi con attenzione il codice qui di seguito, e cerca di capire con esattezza cosa fa. Prova a modificare le variabili presenti nei loop, per vedere come viene modificato il risultato finale.

from turtle import Turtle, Screen

tartaruga = Turtle()
sfondo = Screen()

sfondo.colormode(255)

R = 255
G = 0
B = 0
sfondo.bgcolor((0, 0, 255))

tartaruga.speed(0)

colours = []

while G <= 255:
    colours.append((R, G, B))
    G += 1
while R >= 0:
    colours.append((R, G, B))
    R -= 1
while B < 255:
    colours.append((R, G, B))
    B += 1
while G > 0:
    colours.append((R, G, B))
    G -= 1
while R < 255:
    colours.append((R, G, B))
    R += 1

for i in range(3000):
  # La riga seguente fa cambiare di continuo il colore, anche se i è maggiore del numero di colori presenti nella lista
  tartaruga.color(colours[i % len(colours)])
  tartaruga.forward(i/3)
  tartaruga.right(119)

E adesso?

  • Impara a usare le funzioni per disegnare snowflakes con Turtle.
  • Impara a creare storie interattive in Python attraverso la risorsa storytime

This learning resource is provided for free by the Raspberry Pi Foundation under a Creative Commons licence.
Find more at raspberrypi.org/resources and github.com/raspberrypilearning.