Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova...

23
DEI - Univ. Padova (Italia) 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

Transcript of Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova...

Page 1: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

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*side2area=side1*side2

print "Il perimetro e': ", perprint "L'area e': ", area

Page 2: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

Un piccolo esempio

• Ogni volta che si abbia bisogno di riutilizzare ilcodice che calcola area e perimetro del rettangolosi deve ricopiare tutta la sequenza istruzioni.

Riscrivere le stesse istruzioni più volte:

Spreco di tempo

Facilità di erroridi ricopiatura

Se mi accorgo di un errore devo modificare le istruzioni ovunque le abbia utilizzate

Page 3: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

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 devonoeseguire 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 quelleesplicitamente restituite, sono eliminate con il termine della funzione(località delle variabili)

Page 4: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

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*altezzaarea=base*altezzares=[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]

Page 5: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

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 dellafunzione.

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

Page 6: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

# 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*altezzaarea=base*altezzares=[per,area]

return res

Funzioni esempio: I commenti cominciano con #E’ parte di codice che non viene interpretato come istrizioni, e non è eseguito

Indica che si sta definendo una funzione

Indica la fine della funzione

Argomenti di ingresso alla funzione.Sono gli unici dati presenti all’esterno del codice della funzione utilizzabili e conosciuti anche all’interno

Valori di uscita della funzione.Sono le uniche variabili definite all’interno della funzione che saranno disponibili una volta terminata la funzione

Nome identificativo della funzione

Page 7: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

Località delle variabili 1

a=10b=15e=25

def prova(a):print “Nella funzione prova a = “, ab=100+ad=2*aprint “Nella funzione prova b = “, bprint “Nella funzione prova d = “, dprint “Nella funzione prova e = “, ereturn b+10

c=prova(a)print “Fuori dalla funzione prova a = “, aprint “Fuori dalla funzione prova b = “, bprint “Fuori dalla funzione prova d = “, dprint “Fuori dalla funzione prova e = “, e

Page 8: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

Località delle variabili 2

Nella funzione prova a = 10Nella funzione prova b = 110Nella funzione prova d = 20Nella funzione prova e = 25Fuori dalla funzione prova a = 10Fuori dalla funzione prova b = 15Fuori dalla funzione prova d =

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

Page 9: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

Località delle variabili 3

a=10b=15e=25

def prova(a):print “Nella funzione prova a = “, ab=100+ad=2*aprint “Nella funzione prova b = “, bprint “Nella funzione prova d = “, dprint “Nella funzione prova e = “, ereturn b+10

c=prova(a)print “Fuori dalla funzione prova a = “, aprint “Fuori dalla funzione prova b = “, bprint “Fuori dalla funzione prova d = “, dprint “Fuori dalla funzione prova e = “, e

Variabli globali: disponibili a tutte le funzioni

Parametro della funzione: esso diventa una variabile locale. Il suo nome non ha nessuna relazione con eventuali altre variabili globali con lo stesso nome

Variabli locali: compaiono a sinistra di una istruzione di assegnazione

Variabile globale: èla stessa e che c’èall’esterno della funzione

Page 10: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

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.

Page 11: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

Utilizzare una funzione

a=10

def prova(var_in):……return res

c=prova(a)

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”

Page 12: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

File con più funzioni

def prova(var_in):res = var_in*var_inreturn res

def stampanome(var_in):print “Ciao ”, var_in

print prova(10)print stampanome(‘Andrea’)

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!

Page 13: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

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.

Page 14: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

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 mathtramite l’operatore “.”

Page 15: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

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 pi3.14>>> print math.pi3.1415926535897931>>>

Page 16: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

Importazione: modo 1

Spazio di lavoro

>>> import test>>> b=test.prova(10)>>> print b100

File test.py

def prova(var_in):res = var_in*var_inreturn res

def stampanome(var_in):print “Ciao ”, var_in

Page 17: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

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>>> pi3.1415926535897931

Page 18: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

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.pi3.1415926535897931>>> pi=5>>> pi5

Page 19: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

Importazione: modo 1

Spazio di lavoro

>>> from test import prova>>> b=prova(10)>>> print b100

File test.py

def prova(var_in):res = var_in*var_inreturn res

def stampanome(var_in):print “Ciao ”, var_in

Page 20: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

Fattoriale in Python

Spazio di lavoro

>>> from num import fattoriale>>> fattoriale(4)24

File num.py

def fattoriale(n):if(n<0):

print "Il fattoriale di un numero negativo non e' definito"return -1

res=1for i in range(1,n+1):

res=res*i

return res

Page 21: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

Fibonacci in Python

File num.py

# Funzione iterativa per il calcolo dei numeri di fibonaccidef 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=0fib2=1for i in range(2,n):

fib=fib1+fib2fib1=fib2fib2=fib

fib=fib1+fib2

return fib

Page 22: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

Fibonacci in Python

File num.py

# Funzione iterativa per il calcolo del fattorialedef fattoriale(n):

…return res

# Funzione iterativa per il calcolo dei numeri di fibonaccidef 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=0fib2=1for i in range(2,n):

fib=fib1+fib2fib1=fib2fib2=fib

fib=fib1+fib2

return fib

Page 23: Un piccolo esempio: scriptenrigri/Corsi/InformaticaSdM_0708/Lezione05.pdf · DEI - Univ. Padova (Italia) Un piccolo esempio: script # Script per calcolare il perimetro e l'area #

DEI - Univ. Padova (Italia)

Fibonacci in Python

Spazio di lavoro

>>> from num import fibonacci>>> for i in range(10)

print fibonacci(i)

0112358132134>>>