Funzioni Ordinamento di liste con selection_sort

Transcript

Funzioni Ordinamento di liste con selection_sort
Un piccolo esempio: script
# Script per calcolare il perimetro e l'area
# di un rettangolo, dati i suoi lati
side1=input('Inserisci la lunghezza della base: ')
side2=input("Inserisci la lunghezza dell'altezza: ")
per=2*side1+2*side2
area=side1*side2
print "Il perimetro e': ", per
print "L'area e': ", area
DEI - Univ. Padova (Italia)
Un piccolo esempio
• Ogni volta che si abbia bisogno di riutilizzare il
codice che calcola area e perimetro del rettangolo
si deve ricopiare tutta la sequenza istruzioni.
Riscrivere le stesse istruzioni più volte:
Spreco di tempo
Facilità di errori
di ricopiatura
DEI - Univ. Padova (Italia)
Se mi accorgo di un
errore devo
modificare
le istruzioni ovunque
le abbia utilizzate
Funzioni
•
Una funzione è una sequenza di istruzioni Python identificata da un
nome.
•
Si differenzia da uno script in quanto il suo scopo principale è quello di
produrre uno o più valori a partire da determinati dati di ingresso (cosa
che stabilisce un'analogia con l'omonimo concetto della matematica),
•
Sono utili per automatizzare dei blocchi di istruzioni che si devono
eseguire ripetitivamente dal prompt dei comandi.
Possono operare solo sui dati forniti come ingresso alla funzione e
sulle variabili create all’interno della funzione
•
Qualsiasi variabile creata nella funzione, ad eccezione di quelle
esplicitamente restituite, sono eliminate con il termine della funzione
(località delle variabili)
DEI - Univ. Padova (Italia)
Un piccolo esempio: funzione
# Script che definisce una funzione
# per calcolare il perimetro e l'area
# di un rettangolo, dati i suoi lati
def rett(base, altezza):
per=2*base+2*altezza
area=base*altezza
res=[per,area]
return res
side1=input('Inserisci la lunghezza della base: ')
side2=input("Inserisci la lunghezza dell'altezza: ")
res=rett(side1,side2)
print "Il perimetro e': ", res[0]
print "L'area e': ", res[1]
DEI - Univ. Padova (Italia)
Definizione di una funzione
•
L’istruzione def comunica all’interprete che l’istruzione che segue inizializza la
definizione di una funzione, e che il blocco di istruzioni seguente sono parte della
funzione.
def rett(in1, in2, ...):
•
Seguono poi le istruzioni: sono istruzioni della funzione tutte quelle indentate.
•
Esse possono agire solo su
– variabili create all’interno della funzione
– parametri di ingresso in1, in2, …
•
In uscita viene resa disponibile solo la variabile restituita con return
DEI - Univ. Padova (Italia)
Funzioni esempio:
I commenti cominciano con #
E’ parte di codice che non
viene interpretato come
# Script che definisce una funzione
# per calcolare il perimetro e l'area istrizioni, e non è eseguito
# di un rettangolo, dati i suoi lati
Argomenti di ingresso alla
funzione.
Sono gli unici dati presenti
all’esterno del codice della
def rett(base, altezza):
funzione utilizzabili e
conosciuti anche all’interno
per=2*base+2*altezza
area=base*altezza
Nome identificativo della funzione
res=[per,area]
return res
Indica che si
sta definendo
una funzione
DEI - Univ. Padova (Italia)
Indica la fine
della funzione
Valori di uscita della funzione.
Sono le uniche variabili definite all’interno
della funzione che saranno disponibili una
volta terminata la funzione
Località delle variabili 1
a=10
b=15
e=25
def prova(a):
print “Nella
b=100+a
d=2*a
print “Nella
print “Nella
print “Nella
return b+10
c=prova(a)
print “Fuori
print “Fuori
print “Fuori
print “Fuori
DEI - Univ. Padova (Italia)
funzione prova a = “, a
funzione prova b = “, b
funzione prova d = “, d
funzione prova e = “, e
dalla
dalla
dalla
dalla
funzione
funzione
funzione
funzione
prova
prova
prova
prova
a
b
d
e
=
=
=
=
“,
“,
“,
“,
a
b
d
e
Località delle variabili 2
Nella
Nella
Nella
Nella
Fuori
Fuori
Fuori
funzione prova
funzione prova
funzione prova
funzione prova
dalla funzione
dalla funzione
dalla funzione
a = 10
b = 110
d = 20
e = 25
prova a =
prova b =
prova d =
10
15
Traceback (most recent call last):
File "C:/Programmi/Python25/prova", line 17, in
<module>
print "Nella funzione prova d = ", d
NameError: name 'd' is not defined
DEI - Univ. Padova (Italia)
Località delle variabili 3
Variabli globali:
disponibili a tutte
le funzioni
a=10
b=15
e=25
def prova(a):
print “Nella
b=100+a
d=2*a
print “Nella
print “Nella
print “Nella
return b+10
c=prova(a)
print “Fuori
print “Fuori
print “Fuori
print “Fuori
DEI - Univ. Padova (Italia)
Parametro della funzione: esso
diventa una variabile locale. Il suo
nome non ha nessuna relazione
con eventuali altre variabili globali
con lo stesso nome
funzione prova a = “, a
funzione prova b = “, b
funzione prova d = “, d
funzione prova e = “, e
dalla
dalla
dalla
dalla
funzione
funzione
funzione
funzione
prova
prova
prova
prova
a
b
d
e
=
=
=
=
“,
“,
“,
“,
Variabli locali:
compaiono a sinistra
di una istruzione di
assegnazione
Variabile globale: è
la stessa e che c’è
all’esterno della
funzione
a
b
d
e
Utilizzare una funzione
ATTENZIONE!
Definire una funzione non vuol dire automaticamente eseguirla!!
Una funzione indica che il blocco di istruzioni seguenti sono
identificate da un nome, e che quelle istruzioni per poter
funzionare hanno bisogno di un certo numero di variabili
(argomenti della funzione).
Le istruzioni della funzione sono eseguite solo quando si
“richiama” la funzione, scrivendo il suo nome come una
istruzione.
DEI - Univ. Padova (Italia)
Utilizzare una funzione
a=10
def prova(var_in):
…
…
return res
c=prova(a)
DEI - Univ. Padova (Italia)
Definisco una funzione di
nome “prova” che necessità
di un parametro di ingresso.
La funzione termina quando
l’indentazione torna al livello
del “def”.
Chiedo all’interprete di
eseguire la funzione “prova”
che ho definito, dando al
suo parametro di ingresso
“var_in” il valore della
variabile “a”
File con più funzioni
In un file .py ci possono essere un numero arbitrario di
funzioni definite.
Una funzione può essere utilizzata (eseguite) solo dopo che
sia stata definita!
def prova(var_in):
res = var_in*var_in
return res
def stampanome(var_in):
print “Ciao ”, var_in
print prova(10)
print stampanome(‘Andrea’)
DEI - Univ. Padova (Italia)
Utilizzare funzioni già scritte
Una volta definite delle funzioni, è possibile utilizzarle nel
workspace di Python oppure in uno script attraverso
l’operazione di importazione
Questa operazione rende la definizione delle funzioni
importate disponibili.
DEI - Univ. Padova (Italia)
Importazione: modo 1
Come per il modulo matematico di Python, posso decidere di
aver bisogno di tutte le funzioni definite in tale modulo, e di
volerle tenere separate da eventuali altre funzioni.
>>>import math
In tale modo ogni oggetto (variabile o funzione) definita
all’interno del modulo math, può essere utilizzato:
>>> print math.sin(0.5)
>>> print math.pi
E’ necessario dire esplicitamente all’interprete che le variabili
e le funzioni richieste sono all’interno del modulo math
tramite l’operatore “.”
DEI - Univ. Padova (Italia)
Importazione: modo 1
Se definisco una funzione od una variabile con lo stesso
nome di una appartenente al modulo math, esse sono in
effetti oggetti distinti.
Le variabili e funzioni del modulo math sono protetti dalla
scatola del modulo:
>>> pi=3.14
>>> import math
>>> print pi
3.14
>>> print math.pi
3.1415926535897931
>>>
DEI - Univ. Padova (Italia)
Importazione: modo 1
Spazio di lavoro
File test.py
>>> import test
>>> b=test.prova(10)
>>> print b
100
def prova(var_in):
res = var_in*var_in
return res
def stampanome(var_in):
print “Ciao ”, var_in
DEI - Univ. Padova (Italia)
Importazione: modo 2
E’ possibile importare specifiche funzioni o variabili da un
modulo, per poi utilizzarle senza dover indicare
l’appartenenza ad un modulo.
>>>from math import pi
>>>from math import sin
In tale modo ogni oggetto importato puà essere utilizzato
semplicemente richiamando il suo nome:
>>> sin(0.5)
0.47942553860420301
>>> pi
3.1415926535897931
DEI - Univ. Padova (Italia)
Importazione: modo 2
Se definisco una funzione od una variabile con lo stesso
nome di una importata, sovrascrivo il suo valore.
>>> from math import pi
>>> print math.pi
3.1415926535897931
>>> pi=5
>>> pi
5
DEI - Univ. Padova (Italia)
Importazione: modo 1
Spazio di lavoro
File test.py
>>> from test import prova
>>> b=prova(10)
>>> print b
100
def prova(var_in):
res = var_in*var_in
return res
def stampanome(var_in):
print “Ciao ”, var_in
DEI - Univ. Padova (Italia)
Fattoriale in Python
File num.py
def fattoriale(n):
if(n<0):
print "Il fattoriale di un numero negativo non e' definito"
return -1
res=1
for i in range(1,n+1):
res=res*i
return res
Spazio di lavoro
>>> from num import fattoriale
>>> fattoriale(4)
24
DEI - Univ. Padova (Italia)
Fibonacci in Python
File num.py
# Funzione iterativa per il calcolo dei numeri di fibonacci
def fibonacci(n):
if(n<0):
print "Il numero di Fibonacci di un numero negativo non e' definito"
return -1
if(n<2):
return n
fib1=0
fib2=1
for i in range(2,n):
fib=fib1+fib2
fib1=fib2
fib2=fib
fib=fib1+fib2
return fib
DEI - Univ. Padova (Italia)
Fibonacci in Python
File num.py
# Funzione iterativa per il calcolo del fattoriale
def fattoriale(n):
…
return res
# Funzione iterativa per il calcolo dei numeri di fibonacci
def fibonacci(n):
if(n<0):
print "Il numero di Fibonacci di un numero negativo non e' definito"
return -1
if(n<2):
return n
fib1=0
fib2=1
for i in range(2,n):
fib=fib1+fib2
fib1=fib2
fib2=fib
fib=fib1+fib2
return fib
DEI - Univ. Padova (Italia)
Fibonacci in Python
Spazio di lavoro
>>> from num import fibonacci
>>> for i in range(10)
print fibonacci(i)
0
1
1
2
3
5
8
13
21
34
>>>
DEI - Univ. Padova (Italia)