Per effettuare operazioni differenti a seconda che si verifichi oppure no una certa situazione tutti i principali linguaggi prevedono l'uso dell'istruzione condizionale if (se). In poche parole senza questa istruzione sarebbe impossibile "guidare" i programmi, si potrebbero eseguire solo procedimenti sequenziali sempre uguali.
Lo statement (istruzione/parola riservata del linguaggio) if deve essere seguito dalla "domanda" che si pone al computer, a sua volta seguita dal simbolo : e da ciò che deve essere effettuato solo nel caso in cui la condizione si avveri. Il formato più semplice di una linea if è quindi questo:
if condizione: istruzione
Ogni condizione si costruisce con gli operatori relazionali (elencati di seguito) e può risultare solo vera o falsa (True o False):
> maggiore < minore == uguale >= maggiore o uguale <= minore o uguale != diverso
Dopo questo, forse noioso, ma indispensabile elenco, ecco un piccolo esempio in cui viene chiesta in input una stringa, e vengono eseguite azioni differenti a seconda che essa corrisponda oppure no alla stringa di confronto (per funzionare la risposta in questo caso va inserita in maiuscolo, il computer fa solo confronti molto precisi, non date mai per scontato che possa conoscere significati e similarità a voi ovvi):
print("QUALE LINGUAGGIO STUDI?") a = input() if a == "PYTHON": print("BENISSIMO") if a != "PYTHON": print("AGGIORNATI")
Il diagramma di flusso che rappresenta questo programma prevede anche il simbolo rombo, in cui si indicano internamente le condizioni da verificare e dal quale si diramano due possibili percorsi:
Abbiamo detto che le condizioni possono risultare solo o vere o false, il computer nel valutare le if considera proprio questo valore di verità chiamato valore booleano (dall'algebra di Boole che ammette solo due possibili alternative). Potete provare a stampare sulla console qualche condizione per verificare il risultato che fornisce (le eventuali operazioni matematiche vengono eseguite per prime ed infine viene applicato l'operatore relazionale):
a = 500 print(a == 0) # False print(a < 500*2) # True print(4 > 10) # False print(a+a != a) # True
Se volete valutare diverse condizioni assieme in un colpo solo, per verificare ad esempio se sono tutte contemporaneamente vere, oppure se lo è almeno una di esse, dovete usare gli operatori logici:
and e or oppure not non
Ecco un esempio che mostra come l'operatore and permette di verificare che due condizioni siano contemporaneamente vere per eseguire l'istruzione controllata da ogni riga if:
a = input("QUALE LINGUAGGIO STUDI? ") b = input("CONTINUERAI A FARLO? ") if a == "PYTHON" and b == "SI": print("BENISSIMO") if a == "PYTHON" and b != "SI": print("BENE, MA CONTINUA") if a != "PYTHON" and b == "SI": print("BELLA BATTUTA!!!")
La struttura condizionale if si usa generalmente in una forma più completa assieme allo statement facoltativo else, che identifica l'istruzione (o il blocco di istruzioni) da eseguire se la condizione dell'if risulta falsa (infatti else significa altrimenti). E' fondamentale ricordare che tutte le istruzioni che compongono i blocchi da eseguire in caso di condizione vera o falsa, vanno scritte sfalsate (indentate) di 4 spazi verso destra. Questa spaziatura è la sola cosa che permette a Python di capire quali righe fanno parte di un blocco e quali no. Il blocco termina con la prima istruzione scritta non indentata rispetto alle precedenti.
La forma generale è la seguente:if condizione: istruzione 1 # eseguite se condizione vera istruzione 2 istruzione n else: istruzione 1 # eseguite se condizione falsa istruzione 2 istruzione nRappresentazione grafica:
Ecco quindi un altro piccolo esempio che utilizza l' else e attende in input due numeri da confrontare tra di loro:
a = int(input()) b = int(input()) if a > b: print(a, "E' MAGGIORE DI", b) else: print(a, "E' MINORE O UGUALE A", b)
Un altro esempio: pensate di voler stabilire se un certo anno è bisestile, sappiamo che gli anni bisestili sono quelli divisibili per 400, oppure quelli contemporaneamente divisibili per 4 ma non per 100, abbiamo dunque tre condizioni che stabiliscono che l'anno è bisestile se è vera la prima oppure se contemporaneamente sono vere la seconda e la terza:
condizione1 or (condizione2 and condizione3)
Per valutare le singole condizioni di divisibilità potete usare l'operatore matematico modulo per ottenere il resto di una divisione (se il resto vale zero l'anno è divisibile):
a = int(input("IMMETTI L'ANNO ")) if a%400 == 0 or ( a%4 == 0 and a%100 != 0 ): print("IL", a, "E' BISESTILE") else: print("IL", a, "NON E' BISESTILE")
Nella seconda riga vengono calcolate per prime le operazioni matematiche, poi sono applicati gli operatori relazionali per stabilire la verità o falsità delle tre condizioni, ed infine con queste verità o falsità viene calcolato il risultato dell'espressione logica. Il risultato è un valore booleano True o False che viene testato dall'if.
L'operatore not come avrete intuito indica semplicemente il contrario di ciò che lo segue:
if not a == b equivale a if a != b
Le istruzioni da eseguire sotto if o sotto else possono a loro volta essere altre if, in questo caso si parla di strutture condizionali nidificate (nested) come nel prossimo esempio, in cui si vede tra l'altro come sarebbe più complesso il codice se non ci fossero gli operatori logici:
a = input("QUALE LINGUAGGIO STUDI? ") b = input("CONTINUERAI A FARLO? ") if a == "PYTHON": if b == "SI": print("BENISSIMO") else: print("BENE, MA CONTINUA") else: if b == "SI": print("BELLA BATTUTA!!!")
E' importantissimo rispettare le spaziature, gli if/else interni rappresentano i blocchi di istruzioni dell'if/else esterno, e a loro volta le singole istuzioni print sono i blocchi di istruzioni degli if interni.
Ecco il diagramma di flusso di quest'ultimo esempio: