Forum >> Principianti >> Non so...

Pagina: 1

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
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 ***
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)
--- 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


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)




------
Alberto
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 sequenza
I 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.