Organizzazione¶
Come dare un nome a pezzi di programma, definizione e uso di funzioni.
Un programma è una sequenza di istruzioni ma sono passati i tempi in cui un programma era semplicemente una lista numerata di istruzioni. In un buon programma le istruzioni sono raggruppate in blocchi che hanno un senso preciso, una funzione precisa. questi blocchi si chiamano appunto funzioni (in altri linguaggi si distingue tra funzioni e procedure). Ad ogni funzione possiamo dare un suo nome e ogni volta che definiamo una nuova funzione il linguaggio si amplia di un nuovo comando. Ad es. se definisco una funzione che si chiama “saluta”, il linguaggio saprà eseguire il comando “saluta”. Una funzione è costituita dalla parola riservata “def” seguita dal nome della funzione, da una coppia di parentesi tonde, dal carattere”:” e da un blocco di istruzioni:
def <nome>():
<istruzioni>
<nome>
è una qualunque parola, ma dobbiamo scegliere una parola che descriva
meglio possibile il significato della funzione stessa: il linguaggio di
programmazione serve innanzitutto a rendere comprensibile un programma agli
umani!
<istruzioni>
è una qualsiasi sequenza di istruzioni che può essere
costituita a da istruzioni già presenti nel linguaggio o definite da noi come
nuove funzioni.
Un programma generalmente non è altro che un insieme di funzioni. Per allenarci scriviamo le procedure che calcolino i primi termini di alcune successioni.
- Iniziamo creando un nuovo programma: da
IDLE
,Menu: File - New Window
. - Poi salviamo il file con il nome
successioni.py
,Menu: File - Save as
. - Ora scriviamo le prime righe del programma: i commenti che contengono: data, titolo, autori.
Iniziamo con la successione dei primi 10 numeri triangolari. Questa successione si ottiene partendo da 0 e aggiungendo il successivo numero naturale all’ultimo numero triangolare:
0+0, 0+1, 1+2, 3+3, 6+4, ...
Serve quindi una variabile che contenga il numero triangolare (all’inizio 0) e
un ciclo che percorra i primi numeri naturali (ciclo for
). All’interno del
ciclo aggiungo al numero triangolare attuale l’attuale numero naturale e stampo
il nuovo valore:
def triangolari10():
triangolare=0
for num in range(10):
triangolare+=num
print "%5s" % triangolare
Ora proviamo a eseguire il programma: <F5>
... Non succede niente! In realtà
Pyhon ha lavorato, ma il risultato di questo lavoro non ci appare. Python ha
imparato cosa deve fare quando noi gli diciamo di eseguire triangolari10
.
Per provarlo ci spostiamo nell’ambiente IDLE e diamo il comando:
>>> triangolari10()
Se non ci vengono segnalati errori, vengono stampati i primi 10 numeri
triangolari. Ma se non ci andassero bene i primi 10 numeri della successione, ne
volessimo 15 o 20 o 100? Possiamo scrivere un’altra procedura, simile a questa
che ci chieda quanti numeri vogliamo stampare. L’istruzione che permette di
leggere da tastiera una stringa di caratteri è raw_input([<messaggio>])
.
Possiamo anche iniziare la funzione con un’istruzione che stampi un’intestazione:
def triangolari():
print "Successione dei numeri triangolari"
print
n=raw_input("Quanti termini della successione? ")
triangolare=0
for num in range(n):
triangolare+=num
print "%5s" % triangolare
Solito <F5>
e poi nella shell di IDLE. diamo il comando triangolari()
,
rispondiamo alla richiesta con un numero, ... e leggiamo il messaggio di
errore:
Traceback (most recent call last):
File "<pyshell#4>", line 1, in -toplevel-
triangolari()
File "/.../python/successioni.py", line 16, in triangolari
for num in range(n):
TypeError: an integer is required
Ma noi avevamo scritto un numero come mai range
dice che in n
non c’è un
numero? La funzione raw_input()
restituisce una stringa, dobbiamo
convertirla in numero. Quindi ritorniamo nel programma e modifichiamo la terza
riga della funzione in modo che esegua la conversione e inserisca in n
, non
il risultato di raw_input
ma la conversione in intero del risultato di
raw_input
:
n <-- int <-- raw_input
In Python:
n=int(raw_input("Quanti termini della successione? "))
Con questa modifica, se non ci sono altri errori, la funzione produce la successione desiderata.
Riassumendo
In un programma, le istruzione vanno raggruppate in funzioni (o procedure).
La sintassi per scrivere una funzione è:
def <nome>(): <istruzioni>
Bisogna distinguere bene la definizione di una funzione dall’esecuzione della funzione stessa. Quando si definisce (
def ...
) la funzione, Python associa un blocco di codice a un nome. Quando si esegue una funzione, si scrive il suo nome seguito da una coppia di parentesi e Python esegue il codice associato a quel nome.Il meccanismo delle funzioni permette di creare delle nuove funzionalità del linguaggio permettendo di collegare un blocco di codice a una parola.
Prova tu
- Scrivi le funzioni che stampano i primi 10 numeri pari e i primi 10 numeri dispari.
- Scrivi le funzioni, derivate dalle precedenti, ma che chiedono quanti numeri stampare.
- Scrivi le funzioni che stampano i numeri quadrati e i numeri esagonali.