Forum
>>
Principianti
>>
Non so...
Pagina: 1
Esegui il login per scrivere una risposta.
Pagina: 1
Scritto da trescon |
2016-08-14 10:45:47 - Non so...
|
Salve, ho fatto uno stupidissimo programma x capire come funzionano alcuni comandi di Python ma sicuramente mi manca qualche informazione.
Allego il programino a="" ; b="" ; c="" ; d="" a1="" ; b1="" ; c1="" ; d1="" x="" ; y="" ; z="" def Uno(): a=1 b=2 c=3 d=4 x=a+b+c+d print (x) def Due(): a1=2 b1=4 c1=6 d1=8 y=a1+b1+c1+d1 print (y) def Tre(): #Uno() #Due() z=x+y i=eval(input ("inserisci 1/2/3 : ")) if i== 1: Uno() elif i== 2 : Due() else : i== 3 Tre() print(z) Il problema è che non mi esegue la terza somma. La mia domanda è: lui crea comunque sempre i contenuti delle def ma forse mi manca qualche comando per passare i valori tra def e def? Scusate la banalità grazie --- Ultima modifica di Trescon in data 2016-08-14 10:46:34 --- ------
Alberto |
|
Scritto da Claudio_F |
2016-08-14 11:29:10 - Re: Non so...
|
Ogni assegnamento ad una variabile effettuato all'interno di una funzione crea una variabile locale che non c'entra nulla con un'eventuale variabile con lo stesso nome esterna alla funzione. Le variabili locali svaniscono appena la funzione termina l'esecuzione. Il modo canonico per una funzione per restituire un valore è usare return:
x = 0 def Uno() x = 26 return x x = Uno() print(x)Invece "in lettura" all'interno di una funzione vengono usati in primis i nomi locali, e se non esistenti vengono cercati all'esterno della funzione. Nell'esempio seguente 'fun' somma la variabile 'b' locale con la variabile 'a' esterna, ma non può vedere la 'b' esterna: a = 15 b = 4 def fun(): b = 1 print(a + b) fun() print(a) print(b) *** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione *** |
|
Scritto da trescon |
2016-08-14 12:54:24 - Re: Non so...
|
--- nel caso invece avessi due o più variabili da "portare fuori" , devo fare un "return" x ogni variabile e un assegnamento di quella variabile alla rispettiva funzione (comune atutte le variabili) fuori dalla funziona.
es. : def Uno() x = 26 return x return y return z x = Uno() y = Uno() z= Uno() Giusto ?? Grazie comunque per le spiegazioni esemplificate
------
Alberto |
|
Scritto da Claudio_F |
2016-08-14 13:09:02 - Re: Non so...
|
Come avrai già provato, non è giusto. return interrompe la funzione e quello che c'è dopo non viene eseguito. Si può restituire una sola cosa, ma questa cosa può anche essere una sequenza (lista/tupla), quindi:
def Uno() .... return x, y, z <--- restituisce una tupla di tre elementi x, y, z = Uno() <--- Assegnamento per spacchettamento di sequenzaI nomi non devono per forza corrispondere, così è uguale: def Uno() .... return a, b, c x, y, z = Uno() ---------------------- Dimenticavo prima: sugli input da utente non usare mi 'eval' ma solo 'int' o 'float', e per il sorgente non usare tab ma solo spazi (si deve impostare l'editor per inserire quattro spazi quando si batte tab, questo è lo standard usato). *** Il codice va evidenziato con il simbolo di fianco ai colori per non perdere l'indentazione *** |
Pagina: 1
Esegui il login per scrivere una risposta.