Sei sulla pagina 1di 11

Strutture di Controllo e Funzioni

Prof. Luciano Caroprese

1
Condizioni

L'istruzione if permette di eseguire blocchi di istruzioni se una certa condizione è verificata.


La sua sintassi è molto semplice. La parola chiave if è seguita dalla condizione e dal simbolo :.
Si ricordi che i blocchi di istruzioni sono identificati grazie all'indentazione che, al contrario di
altri linguaggi, in Python deve essere correttamente gestita.
Nell'esempio seguente all'utente è chiesto di inserire un numero intero n. Se il numero è
negativo (if n<0:), lo si cambia di segno.

Possiamo definire condizioni con blocchi di codice alternativi: un blocco da eseguire se la


condizione è vera ed un blocco da eseguire se la condizione è falsa. Il blocco alternativo segue,
opportunamente indentato, la parola chiave else, seguita da :.

Per definire più condizioni mutuamente esclusive si utilizza la parola chiave elif, seguita dalla
condizione e da :.

2
Cicli

In Python esistono due tipi di cicli:

• il ciclo for: esegue un’iterazione per ogni elemento di un iterabile


• il ciclo while: itera fintanto che una condizione è vera.

Un iterabile è un qualsiasi oggetto in grado di restituire tutti gli elementi uno dopo l’altro,
come ad esempio liste, tuple, set, dizionari (restituiscono le chiavi), ecc.

Ciclo ‘for’

Si realizza un ciclo di questo tipo utilizzando la parola chiave for seguita dalla variabile
che sarà restituita dall'iterabile, dalla parola chiave in, dall'iterabile e da :.
Nell'esempio seguente si definisce la lista seq, un iterabile, ed un ciclo for che stampa il
quadrato dei suoi elementi.

Un particolare iterabile è il range (intervallo). Un range restituisce numeri interi appartenenti


ad un certo intervallo. Si definisce in modo molto semplice ed è utilizzato frequentemente nei
cicli for. Nel seguente esempio definiamo un range di numeri interi compresi fra 0, incluso, e 5,
escluso.

Gli oggetti restituiti da un range possono essere inseriti in una lista con una operazione di
casting, come nell'esempio seguente. Nello stesso esempio viene mostrato come sia possibile
definire anche lo step (il passo) con cui dovranno essere generati gli elementi del range. Nella

3
seconda cella sono generati tutti i numeri pari compresi fra 0 (incluso) e 10 (escluso).

Nell'esempio seguente, un range è utilizzato per definire un ciclo for. Sono stampati i quadrati
dei numeri compresi fra 1 (incluso) e 6 (escluso).

Ciclo ‘while’

Possiamo utilizzare un diverso costrutto per l'implementazione di cicli: il while. Si realizza


facendo seguire alla parola chiave while, la condizione ed il carattere :. Si definisce poi il blocco
di istruzioni che sarà eseguito sin tanto che la condizione rimane vera.

Nell'esempio seguente si estraggono e si stampano progressivamente gli elementi in coda ad


una lista sin quando la sua lunghezza è maggiore di 3.
Si osservi che il ciclo termina perché gli elementi restituiti sono via via rimossi dalla lista
stessa (seq.pop()) e dunque quando questa avrà lunghezza pari a 3 (len(seq)==3), la
condizione di continuazione non sarà più soddisfatta.

4
Istruzioni ‘break’ e ‘continue’

L'istruzione break permette di uscire dal blocco relativo ad un if, un for o un while senza
eseguire ulteriori istruzioni appartenenti al blocco stesso.

L'istruzione continue è utilizzata nei cicli. Permette di non eseguire ulteriori istruzioni del
blocco relative all'iterazione corrente e di passare all'iterazione successiva.

Le comprehension

Le comprehension sono uno strumento che ci permette di creare in modo conciso nuove liste,
set, e dizionari partendo da una sequenza di valori esistenti. Le comprehension ci permettono
anche di filtrare e trasformare gli elementi.

Nell'esempio seguente questo meccanismo è utilizzato per creare:


1. la lista dei quadrati dei numeri restituiti da range(10),
2. l'insieme dei cubi dei numeri restituiti da range(10),
3. il dizionario che associa alle lettere a, b, c, d ed e, la corrispondente lettera maiuscola.

5
Possiamo filtrare gli elementi restituiti dal ciclo della comprehension (si veda la prossima
cella) e creare cicli innestati (si veda la cella successiva).

Map e filter

Il costrutto map applica una funzione ad una lista di valori restituiti da un iterabile (un
dominio per la funzione), restituendo un altro iterabile (il corrispondente codominio).

Nell'esempio seguente si definisce la funzione square che restituisce il quadrato di un numero


(i dettagli su come si definiscono le funzioni saranno illustrati nel corso di questa lezione). La
funzione è poi applicata, utilizzando il costrutto map, ai valori restituiti da range(10).

6
Il costrutto filter riceve una funzione booleana ed un iterabile. Il risultato è un iterabile che
restituisce solo gli elementi del primo iterabile che soddisfano la condizione definita dalla
funzione.

Funzioni

Una funzione modella un processo con una sequenza di istruzioni. Può operare su valori in
input e restituire valori in output. Una funzione si definisce con la parola chiave def seguita dal
nome della funzione, dalla lista dei parametri di input - racchiusi fra parentesi e separati da
virgole, e dal simbolo :. Segue, opportunamente indentato, il blocco di istruzioni della funzione
stessa. L'output restituito dalla funzione è definito dall'istruzione return. La seguente funzione
riceve in input la larghezza e l'altezza di un rettangolo e ne restituisce l'area.

Una funzione si invoca richiamandone il nome e definendone gli input. I valori in input
possono essere passati alla funzione semplicemente elencandoli nell'ordine in cui sono stati
definiti i corrispondenti parametri, oppure esplicitando i nomi dei parametri a cui sono
associati. In quest'ultimo caso l'ordine degli input può essere alterato.

7
Ad ogni parametro di una funzione possiamo associare un valore di default che sarà utilizzato
se non sarà fornito in modo esplicito un valore alternativo. Il valore di default di un parametro
è definito facendolo seguire al nome del parametro stesso, come nell’esempio seguente.

Una caratteristica molto particolare di Python, che lo distingue da molti altri linguaggi, è che le
sue funzioni possono restituire più valori. Si consideri l’esempio seguente.

8
La funzione midpoint riceve in ingresso le coordinate di due punti in uno spazio
bidimensionale e restituisce le coordinate del loro punto medio.

Eccezioni

Molte istruzioni, quando eseguite, causano eccezioni. Nell’esempio seguente si cerca di


convertire in un numero intero, una stringa che non rappresenta un numero.

In Python possiamo catturare e gestire le eccezioni. Basta racchiudere il blocco di codice che
può generare un’eccezione in un blocco try, e gestire il caso in cui l’eccezione sia generata nel
corrispondente blocco except.
Se il codice definito nel blocco try genera una eccezione, sarà eseguito il codice definito nel
blocco except, come nell’esempio seguente.

9
Possiamo sollevare un’eccezione esplicitamente con l’istruzione raise, come nell’esempio
seguente.

Gestione dei file

La gestione dei file in Python è estremamente semplice. Prepariamo Python a gestire un file
con l’istruzione open, alla quale dovremo fornire in input il nome del file.

L’istruzione precedente permette di aprire un file in lettura. Se vogliamo scrivere su un file


dovremo fornire l’ulteriore valore ‘w’ (write) per il parametro mode.

Con l’istruzione write scriviamo del testo nel file appena aperto.

10
Finita la gestione del file, esso dovrà essere chiuso con l’istruzione close.

Riapriamo ora in lettura il file appena creato, inserendo esplicitamente il valore ‘r’ per il
parametro mode (‘r’ è comunque il suo valore di default).

11

Potrebbero piacerti anche