[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