Forum >> Principianti >> istruzione return non capita.

Pagina: 1

Buongiorno,

mi scuso se scriverò inizialmente un po' a vanvera ma è un ragionamento (a voce alta per modo di dire, in modo tale che possiate notare se le cose da me apprese siano giuste oppure no).




Premetto di essere totalmente inesperto su Python, sono riuscito da poco a capire a cosa servono le funzioni studiando un manuale "per bambini".




In pratica per evitare la ripetitività di istruzioni in un programma posso usare la funzione modificando solo le variabili, dove inizialmente le scrivo così: def nomefunzione(variabile/i). Dopo aver concatenato a questa riga le istruzioni da far fare alle variabili mi basta scrivere in basso il nome della funzione (senza def e inserire direttamente i numeri o stringhe a seconda del caso) da associare a tutto o parte del programma creato.




Ad esempio, scrivo nel compilatore questo programmino, e l'interprete in base a questo valore mi dà 80 preceduto dal messaggio-stringa.




def moltiplicazione(fattore1,fattore2):
prodotto=fattore1*fattore2
print("il risultato è ", prodotto)

moltiplicazione(4,20)




Però se dovessi far lo stesso con l'istruzione return non ne capisco il senso. Su Internet c'è scritto che "ritorna" "restituisce" ma neanche in questo modo riesco a capire.




def moltiplicazione(fattore1,fattore2):
prodotto = fattore1*fattore2
return prodotto




moltiplicazione(4,8)




In questo caso se io togliessi return l'interprete non mi mostrerebbe nulla e rimarrebbe così >>>

e non riesco a capire il perché visto che alla fine una funzione se chiamata dovrebbe apparire all'interprete.




Se però aggiungo return prodotto e la vado ad indentare nella funzione il risultato mi appare. Perché? A questo punto non capisco la differenza tra quest'ultima e print visto che in entrambi i casi può mostrarmi il contenuto.




Vi chiedo solo una cortesia, ormai mi sono abituato al manuale per bambini, se dovete riportare degli esempi fateli a quel livello che ormai mi sono abituato così XD.

Grazie in anticipo
Ciao caro e benvenuto nel magico mondo di :py:.

Ne abbiamo già parlato in un precedente thread, prova a darci un'occhiata.

Come in quel messaggio, non capisco esattamente cosa ci sia di strano nella comprensione di "restituisce" o "ritorna". Non lo paragonerei a print che serve per stampare un messaggio a video, mentre return ritorna il valore in cui è invocato all'interno della funzione.
>>> def cane(abbaia, corre):
...    print "Il cane abbaia %s volte e corre per %s volte" % (abbaia,corre)
...
>>> def cane_ritorna(abbaia,corre):
...    return "Il cane abbaia %s volte e corre per %s volte" % (abbaia,corre)
...
>>> cane(2,3) #Qui invochiamo il print
Il cane abbaia 2 volte e corre per 3 volte
>>> cane_ritorna(2,3) #Qui ottieni l'output solo da terminale, in uno script non otterresti la stampa a video
'Il cane abbaia 2 volte e corre per 3 volte'
>>> print cane_ritorna(2,3) #Chiamiamo la stessa funzione, ma ora la stampiamo a video
Il cane abbaia 2 volte e corre per 3 volte
>>> #### Ma che succede se voglio attribuire il risultato delle mia funzione? ###
...
>>> var1 = cane(2,3)
Il cane abbaia 2 volte e corre per 3 volte
>>> print var1
None
>>> type(var1)
<type 'NoneType'>
>>> var2 = cane_ritorna(2,3)
>>> print var2
Il cane abbaia 2 volte e corre per 3 volte
>>> type(var2)
<type 'str'>
Cya

P.S. Se usi Python3 adatta l'esempio con la forma corretta di print().
Miracolosamente sono riuscito a capire, ti ringrazio!




Ho un'altra domanda, siccome è sempre inerente alle funzioni e all'istruzione return vorrei che mi spiegassi questa formula (premettendo che ho una certa età e che di matematica non ricordo assolutamente nulla.




def fatt(n):

if n==1:

return 1

else:

return n* fatt(n-1)




In pratica è la formula per trovare il fattoriale di un numero. Non ricordando assolutamente cosa fosse un fattoriale, ma finalmente sono riuscito a capire trovando anche degli esempi.




la formula return n*fatt(n-1) mi spieghi come fa a trovare il fattoriale?

cioè, mettiamo caso che n equivalga a 6...




la formula dovrebbe equivalere ad n (cioè 6) moltiplicato per (6-1, quindi 5) come fa a ripetere il ciclo di moltiplicarlo anche per 4....3....2...1?




Scusami per l'ignoranza, qui si tratta di matematica/o qualche disattenzione informatica visto che studio informatica un po' alla "carlona".



In pratica è la formula per trovare il fattoriale di un numero. Non ricordando assolutamente cosa fosse un fattoriale, ma finalmente sono riuscito a capire trovando anche degli esempi.
Bene.



la formula return n*fatt(n-1) mi spieghi come fa a trovare il fattoriale?

cioè, mettiamo caso che n equivalga a 6...

E' molto semplice in realtà, perché devi leggerlo come se fosse un loop che non termina fino a che n assume il valore di 1. Quindi immaginiamo che il valore da calcolare sia n=6 vediamo che succede passo passo.

Invocando la prima volta la funzione, l'if viene saltato perché il valore di n non è 1 e prosegue verso l'else che a quel punto sarà 6* e qui inizia il loop, perché viene invocato nuovamente la stessa funzione, ma di n-1 quindi 5. Quindi viene invocata nuovamente fatt(n) con n=5 e quando all'else ora questo verrà nuovamente rilanciato, ma con n=4 e così via fino a che n==1 verrà soddisfatto e la funzione terminerà.

Quindi alla fine avrai 6*5*4*3*2*1=720

Tutto chiaro?

Daniele
Ahhh ecco, non sapevo che l'if ed else potessero creare un ciclo ripetitivo finchè la condizione non apparisse vera). Da come l'avevo studiato credevo potessi solo fare una scelta.. Una formula se la condizione è vera e un'altra se è falsa, punto.




Sul manuale che sto studiando,il capitolo dei cicli inizia proprio dopo di questo, per questo non lo sapevo.




Grazie mille per l'aiuto
scusate l'intromissione ciao, io ho sempre una domanda per quanto riguardi le funzioni e il return praticamente non capisco perchè questa funzione in uotput mi restituisce il valore None senza mettere il return vorrei non comparisse nulla se non quello che dicano le istruzioni.
nel codice ho aggiunto il return n perchè altrimenti mi stampava un None che non vorrei si vedesse non so se sono stato chiaro scusate ma sono un novellino :D

def utente():
x="marco"
y="1234"
n=raw_input("Inserisci nome utente: ")
p=raw_input("inserisci la password: ")
if n!=x or p!=y:
print "accesso non consentito"
n=raw_input("Inserisci nome utente: ")
p=raw_input("inserisci la password: ")
if n==x and p==y:
print "Benvenuto admin"
return n



print utente()


--- Ultima modifica di mac21 in data 2017-01-20 16:47:11 ---
scusate l'intromissione ciao, io ho sempre una domanda per quanto riguardi le funzioni e il return praticamente non capisco perchè questa funzione in uotput mi restituisce il valore None senza mettere il return vorrei non comparisse nulla se non quello che dicano le istruzioni.
nel codice ho aggiunto il return n perchè altrimenti mi stampava un None che non vorrei si vedesse non so se sono stato chiaro scusate ma sono un novellino :D

def utente():
x="marco"
y="1234"
n=raw_input("Inserisci nome utente: ")
p=raw_input("inserisci la password: ")
if n!=x or p!=y:
print "accesso non consentito"
n=raw_input("Inserisci nome utente: ")
p=raw_input("inserisci la password: ")
if n==x and p==y:
print "Benvenuto admin"
return n



print utente()


--- Ultima modifica di mac21 in data 2017-01-20 16:47:11 ---


Pagina: 1



Esegui il login per scrivere una risposta.