4: FUNZIONI

LE FUNZIONI

Digitiamo in IDLE:


>>> max(1, 4, 7, 3)

7

>>> min(2, 5, -1)

-1

notiamo che IDLE colora le due parole max e min di viola; inoltre appena apriamo la prima parentesi tonda appare un tooltip: per il momento non siamo in grado di capire cosa significa quindi ignoriamolo.

Cosa abbiamo fatto? Con la prima linea di codice abbiamo chiesto a Python di trovare il massimo tra i quattro numeri 1, 4, 7, 3 e Python ci ha risposto che il massimo è 7; analogamente con la terza riga abbiamo trovato il minimo tra tre numeri; max e min sono due funzioni.

Una funzione è una parte di codice che permette di compiere operazioni su dei dati (argomenti) che noi le forniamo. Per chiamare una funzione (Inglese: function call) si usa la seguente sintassi:

nomefunzione ( arg1, arg2, ... )

Ribadiamo per prima cosa che per chiamare una funzione dobbiamo:

Possiamo lasciare degli spazi prima e dopo le parentesi e le virgole; la prassi comune, per avere una migliore leggibilità, è di non lasciarne attorno alle parentesi (nè prima nè dopo) e di lasciare uno spazio dopo ogni virgola.

In Matematica sarete probabilmente abituati ad usare funzioni del tipo y = f(x); nei linguaggi di programmazione il concetto di funzione è simile a quello della Matematica (una "macchina" che produce un valore y in base ad un valore di partenza x) ma gode di molta più libertà. Vediamo perchè:

Per esempio, il type() visto nella lezione scorsa è proprio una funzione: essa richiede un argomento (di qualsiasi tipo) e restituisce in uscita il tipo dell'argomento.


>>> type(4.5)

<class 'float'>

Vediamo un altro esempio: la funzione abs() prende come argomento un numero e restituisce il suo valore assoluto:


>>> abs(10)

10

>>> abs (-4.543)

4.543

>>> abs("mamma")

Traceback (most recent call last):
  File "<pyshell#8>", line 1, in <module>
    abs("mamma")
TypeError: bad operand type for abs(): 'str'

>>> abs()

Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    abs()
TypeError: abs() takes exactly one argument (0 given)

Esaminiamo i due errori che abbiamo (volutamente!) ottenuto: nel primo abbiamo chiesto a Python di calcolare il valore assoluto di una stringa: ci ha risposto con un TypeError: "bad operand type" (cioè il tipo dell'argomento è sbagliato: Python non può calcolare il valore assoluto di una stringa). Nel secondo abbiamo chiamato la funzione senza argomenti: di nuovo abbiamo un TypeError: Python ci spiega che abs() prende esattamente un argomento e noi non gliene abbiamo dato nessuno.

Un'altra importante funzione che useremo spesso in seguito è len() che ci restituisce la lunghezza di una stringa:


>>> len("Peppe")

5

>>> len("Supercalifragilisticespiralidoso")

32

>>> len(2)

Traceback (most recent call last):
  File "<pyshell#3>", line 1, in <module>
    len(2)
TypeError: object of type 'int' has no len() 

Gli argomenti di una funzione non devono essere per forza essere costanti, ma possono essere espressioni qualsiasi. Inoltre le funzioni possono essere liberamente usate nelle espressioni: Python chiama la funzione ed usa poi il valore che essa restituisce nell'espressione.


>>> abs(2 + 5 - 10)

3

>>> len("Mamma " + "mia")

9

>>> len("TA") + len("TATA")

6

>>> 3 * abs(-1)

3

>>> max(abs(-10), len("zio"), -2)

10

Quante funzioni ci sono in Python? La risposta è migliaia (ad esempio ci sono tutte le funzioni matematiche, molte funzioni supplementari per le stringhe, ecc.). E' chiaro che per usare una funzione senza commettere errori dovremo "conoscerla", cioè sapere:

Un programmatore esperto conosce moltissime funzioni del linguaggio: è un pò come conoscere il vocabolario di una lingua!

ESERCIZIO 4.1: Per entrare nel sito 'Segretissimo.com' bisogna digitare una password di 8 caratteri. Create una variabile pw di tipo stringa e scrivete poi un'espressione booleana che restituisca True se pw può essere usata come password.
ESERCIZIO 4.2: Ora create un'altra stringa pw2 e scrivete un'espressione booleana che restituisca True se la concatenazione di pw e pw2 è lunga esattamente 10 caratteri.
ESERCIZIO 4.3: Ora create tre variabili t1, t2, t3 assegnando loro la temperatura degli ultimi tre giorni. Scrivete una funzione che vi dia la temperatura massima.
ESERCIZIO 4.4 Se la temperatura massima è maggiore di 35 gradi è necessario avvisare la Protezione Civile: scrivete un'espressione booleana che restituisca True se dobbiamo farlo.
SOLUZIONI

Fine della lezione