In questo articolo introduciamo il concetto di funzioni, e parliamo dei cicli e dei controlli in Python.

Prima di cominciare… A che servono le funzioni?

Come vedremo fra poco, le funzioni ci permettono di evitare di ripetere di scrivere codice in modo ridondante. Ovvero, utilizzandole potremo evitare di scrivere due volte la stessa parte di codice. Le funzioni, unite ai cicli di controllo e for/while, ci permettono già di fare una vasta gamma di programmi. (Programmazione procedurale).

Cosa sono le funzioni e come crearle

Innanzitutto, vediamo che cos’è una funzione. In matematica, una funziona è una legge che associa ad ogni x, uno ed un solo elemento di y. In informatica, il concetto è simile: è possibile creare delle funzioni che, dato un certo input (x) eseguono un compito o come nella stragrande maggioranza dei casi ritornano un output (y).

Quindi, vediamo come creare una funzione:

def nomefunzione(variabile):
    pass #Pass serve per uscire dalla funzione

In questo caso, ovviamente, la funzione non fà niente di particolare, però vediamo per esempio la funzione print:

def printVar(variabile): # Definisco la funzione
    print variabile
printVar('Ciao!') # Utilizzo

Questa funziona non fà altro che stampare quello che gli viene dato in ingresso.  Vediamo ora alcune cose da sapere riguardo alle funzioni:

Intanto, per quanto riguarda il nome della funzione  (quello che segue il def e precede le parentesi) deve essere scritto utilizzando lettere,numeri o underscore.

Quello che c’è dentro alle parentesi sono gli “input” (variabili) dopo dichè ci sono due punti che stanno ad indicare che quello che segue è il blocco di codice contenuto dalla funzione.

Andato a capo, dovrete spostarvi di quattro spazi in avanti per indicare che il codice è contenuto nella funzione.

Vediamo il comando Return, che stà ad indicare propriamente l’ output. Infatti, la funzione che abbiamo visto “printVar” è una del primo tipo ovvero esegue solo un comando.

Se invece avessimo voluto un output avremmo dovuto fare così:

def printVar(variabile):
    return variabile
print printVar('Ciao')

Beh, diciamo che anche questa funzione è piuttosto inutile: infatti utilizza come output l’oggetto che abbiamo dato come input.

Però con questa nuova nozione, possiamo cominciare a fare esempi e programmi già più complessi: vediamo per esempio una funzione che ci permette di calcolare l’area del cilindro:

def area_cilindro(raggio, altezza):
    pigreco = 3.14159
    area = pigreco*(raggio**2)
    circonferenza = 2*pigreco*raggio
    return 2*area + altezza*circonferenza

Questa, come possiamo vedere, prende in input due variabili il (raggio e l’altezza) e ritorna l’area del cilindro.

Se per esempio noi richiamiamo la funzione in questo modo:

area_cilindro(10,20)

Dal terminale non succederà nulla. Perchè? Perchè appunto abbiamo dato il return.

Tenetelo sempre a mente perchè potrebbe succedervi ogni tanto che:python-logo

  • Create la funzione e non la richiamate
  • Chiamate la funzione ma non succede nulla (appunto per il return)

Quindi, quello che possiamo fare per capire anche meglio come funziona il return, è di mettercelo in una variabile e printarla:

var = area_cilindro(10,20)
print var

Ora, ciò che ritorna la funzione area_cilindro(10,20) viene salvato dentro alla variabile “var”, dopodichè possiamo farci quello che vogliamo ed in questo caso lo stampiamo.

Gli operatori logici

Introduciamo ora anche il tipo “bool”(booleano): oltre ai tipi Int e Str visti nelle lezioni precedenti, esiste anche il tipo bool che deriva dal matematico Boole ed è un tipo di dato che può essere o Vero o Falso.
Quindi è lecito fare una cosa del genere:

variabile = True
print variabile #ritorna True

Inoltre, dall’algebra booleana, derivano anche gli operatori booleani:

  • Not : La negazione, perciò print not Variabile ritorna False
  • Or : La disgiunzione inclusiva, ovvero la “o” (o questo o quello”); basta che uno dei due sia vero perciò variabile or not variabile ritorna true
  • And : La conginuzione (la “e” – questo e quello), per ritornare true devono essere entrambi veri perciò variabile and not variabile è sempre falsa

Detto questo introduciamo gli operatori relazioni:

  • < : Minore di
  • <= : Minore o Uguale di
  • > : Maggiore di
  • >=:Maggiore o Uguale di
  • == : Uguale a (da non confodere “=” che è un operatore di assegnamento, ovvero lo usiamo per dichiarare le variabile ecc)
  • != : Diverso da (oppure <>)
Se proviamo a scrivere dalla shell di python var = 2>5 e poi printiamo var, cosa uscirà fuori secondo te?

Bene, adesso che conosciamo gli operatori possiamo addentrarci nel ciclo condizionale If…Else

Il ciclo If…else

Bene bene, eccoci finalmente arrivati ad uno dei concetti portanti della programmazione (non che gli altri siano meno importanti eh, però questo lo è davvero).

Cominciamo col dire che “If…else” vuol dire “Se… allora” ed in pratica, ci permette di definire delle reazioni in base a delle azioni. SE questo è questo allora fai questo, SENNò fai quest’altra cosa.

Questo in python si scrive così:

if condizione:
    pass
else:
    pass

Il contenuto dell’if, deve essere identato di 4 spazi in avanti.

Perciò, sfruttando gli operatori visti poco fà, potremmo per esempio fare una cosa del genere:

def rapportoMaggiore(num1,num2):
    if num1 > num2:
        print "Il numero", num1, "e' maggiore di", num2
    else:
        print "Il numero", num1, "e' minore di", num2

Forte eh?
Oltre alla struttura if…else esistene anche il costrutto elif che in pratica ci permette di collegare più if insieme:

def rapportoMaggioreUguale(num1,num2):
    if num1 > num2:
        print "Il numero", num1, "e' maggiore di", num2
    elif num1 == num2:
        print "Il numero", num1, "e' uguale a", num2
    else:
        print "Il numero", num1, "e' minore di", num2

Il ciclo While
Anche questo ciclo è molto importante e molto utile, in parte assomiglia un pò al For ma viene utilizzato per scopi diversi.

Il while (“Mentre”, o meglio “Finchè”) ha questa struttura:

while condizione:
    pass

In pratica, finchè la condizione è vera, il blocco di codice viene ripetuto. Dobbiamo però stare attenti al fatto che prima o poi in qualche modo la condizione diventi falsa altrimenti ci sarà un loop infinito:

while 1<3:
    print "Loop Infinito"

Essendo 1 sempre minore di 3, incombiamo in un loop infinito.

def stampa100volte(var):
    x = 0 #Inizializzo la x con 0
    while x<100: #Finchè x è minore di 100
        print var #Stampa la variabile var
        x +=1 #Incrementa di uno x

Quello che fà questa funzione, è stampare 100 volte l’oggetto che gli diamo come input.