Strutture di controllo¶
Nel primo programma che abbiamo costruito abbiamo utilizzato la struttura base di ogni programma: la sequenza.
Ogni programma può essere pensato come una sequenza di istruzioni, ma ci sono situazioni nelle quali la sequenza non è comoda.
In questo capitolo vedremo altre due strutture di controllo:
- l’iterazione,
- le funzioni,
- la selezione.
L’iterazione¶
Se voglio disegnare un quadrato devo ripetere 4 volte una coppia di comandi, ma se invece di un quadrato volessi far disegnare un “ottantagono”? La cosa non sarebbe più complessa, ma più noiosa sì!
Gli informatici, che sono ancora più pigri dei matematici, hanno inventato dei modi per evitare di ripetere istruzioni. Sono le struttre di iterazione.
In Python come negli altri linguaggi ci sono diverse struttre di controllo, ma noi vedremo l’istruzione for.
La sua sintassi è:
for <variabile> in range(<numero>):
<istruzioni>
Un esempio forse può chiarire meglio il suo funzionamento:
for contatore in range(5):
print(contatore)
La variabile contatore assume tutti i numeri compresi tra 0 e 5, con 5 escluso, e ogni volta viene eseguito il blocco di istruzioni che segue il carattere :.
In questo esempio:
- contatore è il nome della variabile,
- 5 è il numero di ripetizioni,
- print(contatore) è il blocco di istruzioni che viene ripetuto.
Nota: in realtà le cose sono un po’ più complesse, ma, per ora, possiamo accontentarci di questa spiegazione.
Vogliamo scrivere un programma che disegni un quadrato usando l’iterazione.
Per prima cosa dobbiamo scrivere i vari comandi di base...
Ma invece di riscriverli (la pigrizia!), usiamo un barbatrucco:
- salviamo il programma precedente con un nuovo nome, ricordandoci che deve terminare con .py
- svuotiamolo da dutte le istruzioni tranne quelle di base;
- modifichiamo il titolo: “poligoni”;
- eseguiamolo per vedere se è tutto a posto;
Ora scriviamo un programma che disegni un quadrato usando l’iterazione di Python:
import pyturtle as pt # legge la libreria 'pyturtle' chiandola 'pt'
foglio = pt.TurtlePlane() # crea un paese delle tartarughe
tina = pt.Turtle() # crea una tartaruga
for cont in range(4): # ripete 4 volte il blocco seguente
tina.forward(20) # va avanti di 20 passi
tina.left(90) # gira a sinistra di 90 gradi
foglio.mainloop() # rende attiva la finestra
Le funzioni¶
Se in un programma avessi bisogno di più quadrati, dovrei copiare in più punti le stesse tre righe. Questo è contrario all’etica della pigrizia, gli informatici hanno inventato un modo per associare un blocco di istruzioni ad un nome.
In Python la sintassi è:
def <none funzione>():
<blocco di istruzioni>
In pratica possiamo associare alla parola “quadrato” le istruzioni per disegnare un quadrato:
def quadrato():
"""Fa disegnare un quadrato a tina."""
for cont in range(4): # ripete 4 volte il blocco seguente
tina.forward(20) # va avanti di 20 passi
tina.left(90) # gira a sinistra di 90 gradi
Si può osservare che la seconda riga della funzione è costituita da una stringa detta “docstring”. Questa stringa serve per documentare la funzione, non è obbligatoria, ma è fortemente raccomandata.
Il programma precedente può dunque diventare:
import pyturtle as pt # legge la libreria 'pyturtle' chiandola 'pt'
foglio = pt.TurtlePlane() # crea un paese delle tartarughe
tina = pt.Turtle() # crea una tartaruga
def quadrato():
"""Fa disegnare un quadrato a tina."""
for cont in range(4): # ripete 4 volte il blocco seguente
tina.forward(20) # va avanti di 20 passi
tina.left(90) # gira a sinistra di 90 gradi
foglio.mainloop() # rende attiva la finestra
Ma questo programma non disegna niente!
Cosa è successo?
Se lo osserviamo bene possiamo accorgerci che abbiamo definito come disegnare un quadrato, ma non gli abbiamo mai detto di disegnarlo.
dobbiamo aggiungere l’istruzione:
quadrato()
Struttura di un programma¶
Approfittiamo per ristrutturare il programma e dargli la forma che hanno di solito i programmi seri:
- Intestazione;
- lettura delle librerie;
- definizioni;
- programma principale.
# 6 giugno 2014
# Daniele Zambelli
# Primo programma del corso Pas
# lettura delle librerie
import pyturtle as pt # legge la libreria 'pyturtle' chiandola 'pt'
# definizione delle funzioni
def quadrato():
"""Fa disegnare un quadrato a tina."""
for cont in range(4): # ripete 4 volte il blocco seguente
tina.forward(20) # va avanti di 20 passi
tina.left(90) # gira a sinistra di 90 gradi
# programma principale
foglio = pt.TurtlePlane() # crea un paese delle tartarughe
tina = pt.Turtle() # crea una tartaruga
quadrato() # disegna un quadrato
foglio.mainloop() # rende attiva la finestra
Possiamo richiamare una funzione anche dall’interno di un’altra funzione. Per esempio potremmo definire bandierina come un’asta seguita da un quadrato:
def bandierina():
"""Disegna una bandierina quadrata."""
tina.forward(40)
quadrato()
tina.back(40)
Aggiungi questa funzione al programma (dove?) e fa disegnare una bandierina.
Poi usando l’iterazione fa disegnare una rosa di bandierine.
La selezione¶
Alle volte in un programma bisogna scegliere in base a una qualche condizione, se eseguire un blocco di codice o un altro.
La struttura per fare ciò è la selezione. La sua sintassi è:
if <condizione>:
<istruzioni se vera>
[else:
<istruzioni se falsa>]
Nota: la parte tra parentesi quadre è facoltativa.
Anche qui un esempio può chiarire:
numero = int(input('scrivi un numero: '))
if (numero % 2) == 0:
print(numero, 'è pari')
else:
print(numero, 'è dispari')
Questa struttura di controllo ci sarà utile, nella geometria della Tartaruga, quando costruiremo funzioni ricorsive.
Altri problemi¶
- Senza cancellare i poligoni precedentemente disegnati, disegna anche altri poligoni regolari:
- un triangolo;
- un pentagono;
- un esagono;
- un ettagono;
- ...
- Disegna un quadrato formato da quattro quadrati.
- Disegna il simbolo di pericolo radiazioni.
- Ripeti più volte un percorso a casaccio.
- Realizza bandierine triangolari o con altre forme.
- Disegna una fila di bandierine.
- Definisci una funzione che disegni un percorso a casaccio, poi richiamala all’interno di un ciclo.
- Scrivi un programma che chiede un numero compreso tra 2 e 5 e disegna un poligono con il numero di lati digitato.