Gràfics simples en Python amb Turtle
Aquesta lliçó explica les instruccions bàsiques que permeten resoldre alguns problemes gràfics de Jutge.org que s’han de codificar amb la llibreria Turtle de Python.
Primers passos amb la tortuga de Python
La llibreria estàndard turtle
permet crear dibuixos i gràfics a través d’una tortuga. La tortuga és una animaló virtual que té enganxat un llapis a la seva cua i que obeeix a les instruccions de moviment que se li donen per tal de dibuixar mentre es desplaça.
Al principi, la tortuga es troba al centre de l’àrea de dibuix mirant cap a l’est. Si li diem d’avançar 100 unitats, la tortuga es desplaça 100 unitats cap a l’est, marcant el seu rastre amb seu el llapis. Si li diem ara de girar cap 90 graus a l’esquerra i avançar 100 unitats més, la tortuga extendrà el seu traç tot pintant un angle. Provem-ho!
Per utilitzar la tortuga, cal importar el mòdul turtle
:
>>> import turtle
Amb això, no es veu res encara, és normal. Ara, fem avançar la tortuga endavant 100 unitats amb la comanda forward
:
>>> turtle.forward(100)
Una finestra amb l’àrea de dibuix apareix i la tortuga pinta un primer segment!
El triangle representa la posició de la tortuga i la seva direcció. Els vells temps de Logo on la tortuga era un simpàtic gràfic de 8 bits ja han caigut en el trist oblít del passat…
Ara li podem dir de girar 90 graus a l’esquerra amb la comanda left
:
>>> turtle.left(90)
Podem comprovar que la tortuga ara mira cap al nord:
I ara podem fer avançar la tortuga endavant 100 unitats més:
>>> turtle.forward(100)
Un primer programa
Ara que ja sabem com funciona la tortuga, podem escriure un petit programa per dibuixar un quadrat:
from turtle import *
for i in range(4):
forward(100)
right(90)
done()
Les quatre instruccions forward(100)
i right(90)
efectivament pinten un quadrat. La instrucció done()
al final del programa serveix per evitar que la finestra amb l’àrea de dibuix es tanqui inmediatament al acabar el programa.
Més instruccions de moviment de la tortuga
La tortuga es pot moure amb aquestes instruccions:
forward(d)
: avança la tortugad
unitats.backward(d)
: recula la tortugad
unitats.left(a)
: gira la tortuga amb un angle dea
graus cap a l’esquerra.right(a)
: gira la tortuga amb un angle dea
graus cap a la dreta.circle(r)
: mou la tortuga en cercle amb un radi der
unitats.home(a)
: mou la tortuga a la seva posició inicial al centre de l’àrea de dibuix.
Proveu cadascuna d’aquestes instruccions pel vostre compte i sigueu creatius per fer alguna forma interessant!
El llapis
La tortuga disposa d’operacions per canviar el seu llapis. Aquestes comandes permeten aixecar o baixar el llapis, de forma que la tortuga es mogui sense deixar rastre:
penup()
: aixeca el llapis (no pinta al desplaçar-se).pendown()
: baixa el llapis (sí pinta al desplaçar-se).
També es pot canviar el gruix i el color del llapis:
pensize(s)
: tria un gruix de llapis des
unitats (al principi val 1, proveu un valor de 5 per traç gruixut).color(c)
: tria el colorc
pel llapis.
Els colors es poden donar de moltes maneres, la més fàcil és donar un valor de text com ara 'black'
, 'red
, 'blue'
, …
Més informació
La tortuga ofereix moltes més operacions! Podeu accedir a tota la documentació de la llibreria turtle
a https://docs.python.org/3.10/library/turtle.html.
Turtle a Jutge.org
Jutge.org no pot usar la llibreria estàndard turtle
per jutjar els enviaments perquè aquesta força un ús interactiu. Per això, Jutge.org substitueix la llibreria estàndard turtle
per la llibreria turtle_pil
que emula l’original però desa els gràfics en fitxers PNG. La majoria de les operacions de la llibreria estàndard turtle
estan suportades per turtle_pil
, amb l’excepció de les operacions que tenen a veure amb la gestió interactiva de la finestra, el ratolí o el teclat.
La llibreria turtle_pil
no desa el gràfic fins que no es crida a turtle.done()
, per tant, no oblideu afegir aquesta comanda al final del vostre programa quan l’envieu a Jutge.org!
Lliçons.jutge.org
Jordi Petit
Universitat Politècnica de Catalunya, 2023
Prohibit copiar. Tots els drets reservats.
No copy allowed. All rights reserved.