[PIPython] pietà e funzioni
Gianmario Salvetti
salvetti.gianmario
Ven 19 Nov 2004 15:16:53 CET
mario rossi wrote:
>Immagina di dover cercare un nome tra 1000, e fare
>questa operazione molte altre volte durante il
>programma; costruisci una funzione,
>def cerca ( giovanna ):
>#ho creato una funzione di nome cerca con parametro
>giovanna; nel caso mi servisse cercare maria basta che
>al momento opportuno digitero' cerca (maria)???
>giusto?.
>
>
>
Dipende, ma probabilmente quello che pensi e' sbagliato.
Quando definisco una funzione, dovrei cercare di essere
il piu' generico possibile, quindi ad esempio:
def cerca(nome_persona):
In realta', nome_persona non e' il nome della persona da cercare, ma
la variabile che momorizza il nome della persona da cercare.
nome_persona e' un contenitore. Che tipo di valore memorizza
nome_persona? Questo dipende da te, da come scrivi il codice della
funzione. Supponiamo quindi di rappresentare i nomi delle persone
attraverso delle stringhe. Quando devi utilizzare la funzione, la richiami,
passandole il valore di ricerca ad esempio:
cerca("maria")
oppure
cerca("giovanna")
Dove hai sbagliato? Il tuo errore probabilmente e' concettuale. Se scrivi
cerca(maria) maria viene inteso come un contenitore e non come il nome
da cercare, pertanto, se la variabile (contenitore) maria esiste, la
funzione
tentera' una ricerca sul suo contenuto, ad esempio:
1:maria = "maria" #Creo la variabile maria e le assegno il valore di
tipo stringa "maria"
2:cerca(maria) # eseguo una ricerca sul valore contenuto nella variabile
maria cioe' "maria"
ma se l'istruzione 1 non viene eseguita, il programma ti dara' errore,
perche'
il contenitore (variabile) maria, non esiste. Attenzione quindi:
maria -> variabile (contenitore)
"maria" -> stringa, valore che puo' essere assegnato ad una variabile
(inserito in una variabile)
Quindi anche questo sarebbe corretto:
1:maria = "giovanna" # Assegno al contenitore di nome maria il valore di
tipo stringa "giovanna"
2:cerca(maria)
ma senza dubbio ingannevole. Se scrivi invece cosi' e' piu generico, ma
difficilmente ti puoi sbagliare
1:nome="giovanna"
2:cerca(nome) #passo alla funzione cerca il valore di nome che e' "giovanna"
3:nome="maria"
4:cerca(nome) #passo alla funzione cerca il valore di nome che ora e'
"maria"
in maniera piu' sintetica potresti scrivere
1: cerca("giovanna") # passo alla funzione cerca il valore "giovanna"
2: cerca("maria") # passo alla funzione cerca il valore "maria"
>Sotto la funzione def maria (giovanna):
>cosa devo scrivere,è questo che mi frena.
>Vi ringrazio ancora tutti e mi scuso per la mia
>insistenza.
Piccolo esempio. Supponiamo di avere due utenti, Maria e Giovanna a cui
assegnamo la password pippo1 e pippo2.
Devo scrivere la funzione cerca che trovi la password associata a Maria
o la password associata a Giovanna.
1 - Con che tipo di valore rappresento i nomi delle due ragazze?
2 - Con che tipo di valori rappresento le password?
Utilizzo le stringhe sia per 1 che per 2.
Definisco la funzione:
def cerca(nome):
if nome == "maria":
return "pippo1" # return mi permette di fornire a chi ha
chiamato la funzione un risultato
elif nome == "giovanna":
return "pippo2" # fornisco a chi ha chiamato la funzione il
valore "pippo2"
else:
return "non esiste password associata a questo nome"
definita la funzione posso richiamarla
password = cerca("maria")
print password
password = cerca("giovanna")
print password
password = cerca("piero")
print password
More information about the Python
mailing list