Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
def funzioneCheRispettaLeConvenzioni():
pass
I testi dei vari esercizi erano tutti del tipo: “Scrivi una
funzione che prende in input due numeri” oppure “una lista
di numeri” oppure “un numero intero”… Hai provato ad
eseguire i tuoi programmi passando alle varie funzioni, per
esempio, una stringa al posto di un numero, o una lista al
posto di un numero? Ti suggerisco un po’ di esperimenti e
aggiustamenti da fare:
1. OK
def maggioreDellaTupla(t):
(a,b) = t # la tupla viene "spacchettata"
# il resto è simile al primo esercizio
if a > b: return a
return b
3. E’ un po’ più complicato del necessario e soprattutto
funziona solo per liste di una certa lunghezza. Prova a
rifare questo esercizio. Lo stesso errore è stato fatto
anche nell’esercizio 5 e nel 6. Osserva questa soluzione:
def maggioreDellaLista(l):
m = l[0] # provvisoriamente, diciamo che
il primo elemento della lista è il maggiore e
salviamolo in una variabile m
for e in l:
if e > m: m = e # nel momento in cui
troviamo un valore di quelo salvato in m,
aggiorniamo la variabile m con tale valore
return m # restituiamo m
4. OK
5. Vedi 3
Ricorsione
L’argomento di cui volevo parlarti oggi è la ricorsione, che è
un concetto fondamentale della programmazione, anche se
all’inizio potrebbe risultare un po’complicato da utilizzare.
Non c’è dunque motivo per cui una funzione non possa
chiamare sé stessa (questo è appunto il fenomeno che si
chiama ricorsione). Immaginiamo di voler scrivere una
funzione che fa il conto alla rovescia a partire da un certo
numero in input, ma di non avere a disposizione né il ciclo
for né il ciclo while , ma solo gli if . Per risolvere questo
problema apparentemente difficile, basta scrivere una
funzione ricorsiva, cioè appunto una funzione che chiama sè
stessa:
def contoAllaRovescia(n):
if n <= 0:
print("Pronti al decollo!") # frase a
caso
else:
print n
contoAllaRovescia(n - 1) # ricorsione:
chiamiamo la funzione contoAllaRovescia stessa
(ma con un argomento diverso)
def cercaIterativo(a,lista):
n = len(lista)
for i in range(n):
if lista[i] == a:
return i
return False