Nuove operazioni¶
Come scrivere funzioni con un risultato.
Abbiamo scritto delle funzioni che calcolano e stampano il risultato di certe
formule, ma i linguaggi di programmazione permettono anche di scrivere dei
blocchi di codice che si comportano come delle operazioni cioè funzioni che
danno un risultato. I linguaggi di programmazione permettono perciò di creare
delle nuove operazioni. L’istruzione che permette di creare nuove operazioni è
l’istruzione return
. Questa istruzione ha due effetti: termina una funzione
e restituisce un risultato a chi l’ha chiamata.
Vediamo un esempio, possiamo scrivere l’operazione che restituisce la media di
due numeri. Iniziamo un nuovo programma, menu -File-New window
, solite righe
di commento, poi scriviamo la funzione:
def media(n1, n2):
return (n1+n2)/2.
Solito <F5> e poi nella shell di IDLE:
>>> print media(12, 18)
15.0
Il fatto di usare delle funzioni che restituiscono un valore è importante in
informatica, permette di separare la parte di calcolo da quella di input
e
output
dei dati.
Riprendiamo il calcolo dell’area di un triangolo dati i tre lati, possiamo scrivere una funzione che calcoli la formula di Erone:
def erone(l1, l2, l3):
p=(l1+l2+l3)/2.
return (p*(p-l1)*(p-l2)*(p-l3))**0.5
Osservazioni:
- Nella formula
p=(l1+l2+l3)/2.
le parentesi e il punto dopo il 2 sono necessari, perché? - Questa volta non ho utilizzato la libreria
math
per calcolare la radice quadrata, ma ho usato un trucco matematico: la radice quadrata di un numero è uguale a una potenza che ha per esponente il valore ½ o 0.5 che è equivalente. - Nei fogli di calcolo e in altri linguaggi il simbolo della potenza è “^”, in Python è una coppia di asterischi “**”.
Ora la funzione areatriangoloABC diventa:
def areatriangoloABC(l1, l2, l3):
"""Calcolo dell'area con la formula di Erone."""
# Immissione dati
print "Area del triangolo"
print "lato1 = %s" % l1
print "lato2 = %s" % l2
print "lato3 = %s" % l3
# Calcolo
area=erone(l1, l2, l3)
# Visualizzazione risultati
print "area = %s" % area
In questo modo abbiamo realizzato una separazione tra la funzione che realizza la comunicazione con l’utente e la funzione che realizza il calcolo. Questa separazione è molto importante nei programmi “seri”. Le funzioni permettono un tipo di programmazione molto sintetica e pulita. Ci sono linguaggi di programmazione che usano pesantemente questa tecnica, sono detti linguaggi funzionali. Python permette anche una programmazione di tipo funzionale.
Supponiamo di dover calcolare la media dell’area di due triangoli. La traduzione in Python diventa quasi letterale:
def mediatri(a1, a2, a3, b1, b2, b3):
return media(erone(a1, a2, a3), erone(b1, b2, b3))
e nella shell di IDLE:
>>> print mediatri(3, 4, 5, 13, 14, 15)
45.0
Come funziona? mediatri
riceve 6 numeri, i lati dei 2 triangoli, chiama la
funzione media
e le passa due valori i risultati di erone
con i primi 3
lati e erone
con gli altri 3. Le funzioni erone
calcolano le due aree,
la funzione media
ne calcola la media e la funzione mediatri
restituisce
il risultato.
Python permette anche di costruire funzioni che danno più risultati. Questo può
risultare utile in matematica, ad esempio il punto medio M
di un segmento di
estremi A=(xa, ya)
e B=(xb, e yb)
ha per coordinate xm=(xa+xb)/2.
e
ym=(ya+yb)/2.
. In Python si può scrivere la funzione:
def puntomedio(xa, ya, xb, yb):
return (xa+xb)/2., (ya+yb)/2.
e nella shell di IDLE:
>>> print puntomedio(2, 5, -6, 1)
(-2.0, 3.0)
Riassumendo
- È possibile scrivere funzioni che restituiscono un risultato.
- Una funzione termina quando non ci sono più istruzioni da eseguire o quando
viene eseguita l’istruzione
return
. - Il comando che termina l’esecuzione di una funzione fornendo il risultato è
return <espressione[,..]>
. - Una funzione può restituire più di un risultato, in questo caso i risultati
vanno elencati dopo l’istruzione
return
, separati da virgole. - Python permette una programmazione funzionale.
Prova tu
- Riscrivi il calcolo dell’area dei poligoni usando delle funzioni.
- Scrivi la funzione che calcola la media tra 3 numeri.
- Riscrivi la funzione
puntomedio()
in modo che usi la funzionemedia
. - Scrivi la funzione che restituisce coefficiente angolare e termine noto della retta passante per due punti.
- Scrivi la funzione che restituisce coefficiente angolare e termine noto dell’asse di un segmento.
- Scrivi la funzione che effettua la traslazione di un punto nel piano cartesiano.
- Scrivi le funzioni che effettuano il ribaltamento di un punto rispetto agli assi e all’origine.