SOTTOPROGRAMMI

a cura di Samuele Malta

Introduzione

STRUTTURA FUNZIONI

Una funzione è composta da: un’intestazione, una parte dichiarativa locale e una parte esecutiva.

Dichiarazione e definizione

Per poter essere utilizzata all’interno di un programma una funzione deve essere dichiarata e definita. Bisogna quindi darle un nome, specificare quali valori di ingresso necessita e quali operazioni devono essere eseguite nel corpo della funzione.

Per dichiarare una funzione si deve utilizzare il comando def seguito dal nome della funzione e fra parentesi i valori di ingresso che vanno inseriti.

 

Esempio: def somma_numeri(a,b)

 

Quando vorremo quindi chiamare questa funzione all’interno del nostro programma ci basterà digitare il nome della funzione ed inserire fra le parentesi i parametri che intendiamo passarle, ad esempio: somma_numeri(3,4).

 

Una volta dichiarata una funzione va anche definita, bisogna quindi scrivere quali operazioni dovrà effettuare dopo la chiamata, vedremo come costruire il corpo della funzione e come farla interagire con il resto del programma.

Esempio:

Passaggio parametri

Il sottoprogramma, come già analizzato, necessita dei valori di ingresso che devono essere forniti da noi.

In fase di dichiarazione della funzione dobbiamo quindi determinare quali sono gli elementi che intendiamo passare dal programma al corpo della funzione e dobbiamo elencarli fra parentesi, semplicemente scrivendo il nome che intendiamo utilizzare per indicarli, separati da una virgola.

Esempio: in def prodotto_numeri(c,d,e)c, d ed e sono i numeri che dovremo fornire alla funzione.

 

Attenzione! E’ possibile anche non passare alcun parametro dal main alla funzione, basta lasciare le parentesi vuote nella dichiarazione, senza inserire valori.

Corpo della funzione

Si tratta dell’anima del sottoprogramma, qui è dove spieghiamo praticamente cosa dovrà fare la nostra funzione. Possiamo utilizzare tutti i costrutti e i blocchi già visti nelle lezioni precedenti, costruendo di fatto un piccolo programma all’interno dello script principale (main), da qui il nome di “sottoprogramma”.

All’interno del corpo di una funzione possiamo chiamare a loro volta altre funzioni e introdurre variabili e parametri che rimarranno nello scope della funzione e quindi non compariranno all’interno del main.

VALORE DI RITORNO

Quando chiamiamo una funzione e vogliamo che questa svolga delle operazioni e ci fornisca uno o più elementi in risposta, dobbiamo inserire nella definizione dei valori di ritorno (uno o più, ma anche nessuno).

Per inserire il valore di ritorno desiderato ci basta utilizzare il comando return seguito dal nome della variabile o del parametro che intendiamo ritornare al main.

E’ anche possibile non inserire dei valori di ritorno se volessimo eseguire delle operazioni che non richiedono di fornire valori o informazioni da usare nel programma, per esempio se vogliamo stampare a video delle frasi:

PROVA TU!

Esercizio 1

Implementa un programma per aiutare un cassiere nel calcolo dei resti. Dato un resto in input, indicare quali e quante monete devono essere consegnate al cliente.

N.B.: il numero di monete del resto deve essere il più piccolo possibile.

1   resto = int(input("A quanto ammonta il resto in centesimi? "))

2   while resto >= 100:
3       resto = int(input("Il resto deve essere meno di un euro.\nA quanto ammonta il resto? "))

4   c50 = 0
5   c20 = 0
6   c10 = 0
7   c05 = 0
8   c02 = 0

9   while resto >= 2:
10      if resto >= 50:
11          resto -= 50
12          c50 += 1
13      elif resto >= 20:
14          resto -= 20
15          c20 += 1
16      elif resto >= 10:
17          resto -= 10
18          c10 += 1
19      elif resto >= 5:
20          resto -= 5
21          c05 += 1
22      elif resto >= 2:
23          resto -= 2
24          c02 += 1

25  print("Il resto dovuto è %s 50-centesimi, %s 20-centesimi, %s 10-centesimi, %s 5-             26           centesimi, %s 2-centesimi e %s 1-centesimo." % (c50, c20, c10, c05, c02, resto))

Esercizio 2

Scrivi un programma che individui la fattorizzazione di un numero in fattori primi, implementando le opportune funzioni.

1   def primo(n):

2      for x in range(2, n//2):

3         if n % x == 0:

4            return False

5         return True

6

7   def fattorizza(x):

8      fattori=[]

9      for fattore in range(2, x+1):

10         if primo(fattore):

11           if x == 1:

12               return fattori

13           while x % fattore == 0:

14               if x == 1:

15                   return fattori

16               x /= fattori

17               fattori.append(fattore)

18

19   z = int(input("Inserisci un numero: "))

20  print("%s si fattorizza in: "%(z))

21   print(fattorizza(z))

Esercizio 3

Realizza una calcolatrice implementando un programma, ed eventualmente delle funzioni ausiliarie, in python. Le operazioni da implementare sono somma, differenza, prodotto, divisione, elevamento a potenza e fattoriale.

1   def fattoriale(n):

2        fact = 1

3        if n > 1:

4           for i in range (2, n+1):

5              fact *= i

6   return fact

7

8   print("--- Calcolatrice ---")

9   print("Comandi:\n+ -> addizione\n- -> sottrazione\n* -> moltiplicazione\n/ -> divisione\npow ->      10            potenza\nfatt -> fattoriale\nesc -> esci")

11

12   cmd = ""

13   while cmd != "esc":

 14      cmd = input("\nInserisci un comando: ")

15 

16       if cmd == "+":

17           a = float(input("Inserisci il primo addendo: "))

18           b = float(input("Inserisci il secondo addendo: "))

19           print("%s + %s = %s" % (a, b, a + b))

20       elif cmd == "-":

21            a = float(input("Inserisci il primo addendo: "))

22            b = float(input("Inserisci il secondo addendo: "))

23            print("%s - %s = %s" % (a, b, a - b))

24        elif cmd == "*":

25            a = float(input("Inserisci il primo fattore: "))

26            b = float(input("Inserisci il secondo fattore: "))

27            print("%s * %s = %s" % (a, b, a * b))

28        elif cmd == "/":

29            a = float(input("Inserisci il dividendo: "))

30            b = float(input("Inserisci il divisore: "))

31             print("%s / %s = %s" % (a, b, a / b))

32         elif cmd == "pow":

33             base = float(input("Inserisci la base: "))

34             esp = float(input("Inserisci l'esponente: "))

35             print("%s^%s = %s" % (base, esp, base ** esp))

36        elif cmd == "fatt":

37             num = int(input("Inserisci un numero intero: "))

38             fatt = fattoriale(num)

39             print("%s! = %s" % (num, fatt))

40        elif cmd != "esc":

41              print("Comando non riconosciuto, riprova.")

42

43   print("\nCalcolatrice spenta")

CONCLUSIONE

Complimenti, hai completato la lezione 6 e soprattutto il modulo informatica!

In questa lezione hai imparato i concetti più importanti dei sottoprogrammi: adesso sei in grado di scrivere dei semplici programmi in Python e puoi iniziare a costruire i tuoi progetti!

Se vuoi andare avanti e approfondire altri aspetti della programmazione, nella pagina risorse troverai alcuni siti e corsi gratuiti consigliati.

Usa i pulsanti qui sotto per avanzare alla pagina risorse o per tornare alla home del corso.