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:

  1. salviamo il programma precedente con un nuovo nome, ricordandoci che deve terminare con .py
  2. svuotiamolo da dutte le istruzioni tranne quelle di base;
  3. modifichiamo il titolo: “poligoni”;
  4. 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:

  1. Intestazione;
  2. lettura delle librerie;
  3. definizioni;
  4. 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

  1. Senza cancellare i poligoni precedentemente disegnati, disegna anche altri poligoni regolari:
  2. un triangolo;
  3. un pentagono;
  4. un esagono;
  5. un ettagono;
  6. ...
  7. Disegna un quadrato formato da quattro quadrati.
  8. Disegna il simbolo di pericolo radiazioni.
  9. Ripeti più volte un percorso a casaccio.
  10. Realizza bandierine triangolari o con altre forme.
  11. Disegna una fila di bandierine.
  12. Definisci una funzione che disegni un percorso a casaccio, poi richiamala all’interno di un ciclo.
  13. Scrivi un programma che chiede un numero compreso tra 2 e 5 e disegna un poligono con il numero di lati digitato.