Come la maggior parte dei linguaggi per la programmazione e lo sviluppo anche Python mette a disposizione dei coders i cosiddetti costrutti condizionali; in sostanza parliamo di espressioni il cui esito, cioè il risultato prodotto, dipende dalla soddisfazione o meno di una condizione precedentemente definita. Per la definizione di un costrutto condizionale si utilizzano le keywords if, l’unica obbligatoria, elif ed else, gli esempi proposti di seguito ne evidenzieranno il funzionamento.
if
La keyword if ha il compito di introdurre una condizione, nel codice seguente quest’ultima si basa sull’uguaglianza di un valore passato interattivamente come parametro a quello assegnato ad una variabile:
# Utilizzo di if nei costrutti condizionali
# l'applicazione restituirà in output una conferma
# soltanto se il parametro inviato dall'utente
# è identico al valore della variabile x
x = 8
y = int(input("Inserisci un numero intero compreso tra 0 e 10: "))
if y == x:
print("Il numero inserito è esatto")
Tramite lo script proposto l’utente potrà digitare un numero che verrà impiegato come parametro per valorizzare la variabile "y", nel caso in cui tale valore dovesse essere identico a quello di "x", è cioè pari a "8", allora l’applicazione stamperà il messaggio di conferma "Il numero inserito è esatto", altrimenti nulla verrà restituito in output.
Il codice proposto, per quanto funzionante, è quindi incompleto, non prevede infatti alcun comportamento per i casi in cui l’uguaglianza richiesta dalla condizione introdotta da if non venga soddisfatta; a questo proposito è quindi possibile incrementare le funzionalità previste facendo ricorso alla keyword else.
else
else consente di definire un’istruzione alternativa che verrà eseguita quando una condizione imposta tramite if non dovesse verificarsi. A titolo di esempio, si implementi lo snippet precedente in questo modo:
# Utilizzo del blocco if/else nei costrutti condizionali
# l'applicazione restituirà in output una conferma
# se il parametro inviato è identico al valore di x
# altrimenti verrà eseguita l'istruzione introdotta da else
x = 8
y = int(input("Inserisci un numero da 0 a 10: "))
if y == x:
print("Il numero inserito è esatto")
else:
print("Il numero inserito non è esatto")
L’istruzione introdotta da else dovrà essere preceduta da quest’ultimo seguito dal simbolo dei due punti (":"), esattamente come accade per if; nel caso in cui il valore passato ad "y" sia diverso da "8" allora verrà stampato a video il messaggio "Il numero inserito non è esatto".
Ora l’applicazione proposta risulta più completa rispetto a quella proposta nel primo esempio, cosa accadrebbe però se l’utente dovesse inserire un valore presente al di fuori dell’intervallo consentito, cioè tra "0" e "10"? Per questo caso specifico non è stato ancora definito alcun controllo.
elif
elif è una parola chiave che, come else, introduce un’istruzione alternativa nei costrutti condizionali, ma l’esecuzione di quest’ultima sarà vincolata ad un’ulteriore condizione; anche in questo caso un esempio pratico consentirà di capire meglio quanto esposto:
# Utilizzo del blocco if/elif/else nei costrutti condizionali
# verrà restituita in output una conferma
# se il parametro inviato è identico al valore di x
# altrimenti verrà eseguito un confronto tra i valori di y e z
# o restituita l'istruzione introdotta da else
x = 8
z = 10
y = int(input("Inserisci un numero da 0 a " + str(z) + ":"))
if y == x:
print("Il numero inserito è esatto")
elif y > z:
print("Sono consentiti soltanto valori compresi tra 0 e " + str(z))
else:
print("Il numero inserito non è esatto")
In sostanza if introduce una condizione, per soddisfarla il valore di "y" dovrà essere uguale a quello di "x", nel caso in cui ciò non sia vero allora l’applicazione valuterà una seconda condizione, introdotta da elif e anch’essa seguita dal simbolo dei ":", che sarà soddisfatta soltanto se "y" dovesse avere un valore superiore a "z". La mancata soddisfazione di entrambe le condizioni indicate porterà invece all’esito previsto tramite else.
Dal punto di vista dell’ottimizzazione, dato che quello che si sta realizzando è un programma interattivo, potrebbe essere una buona idea fornire all’utilizzatore degli indizi che gli permettano di scoprire più velocemente l’entità del valore assegnato ad "x" diminuendo il numero di tentativi effettuati.
# Utilizzo del blocco if/elif nei costrutti condizionali
# verrà restituita in output una conferma
# se il parametro inviato è identico al valore di x
# altrimenti verrà eseguito un confronto tra i valori di y e x
x = 8
y = int(input("Inserisci un numero da 0 a 10: "))
if y == x:
print("Il numero inserito è esatto")
elif y > x:
print("Il numero inserito è superiore a quello atteso")
elif y < x:
print("Il numero inserito è inferiore a quello atteso")
In pratica, la logica ci suggerisce che l’applicazione potrà funzionare perfettamente prevedendo soltanto tre casi: quello in cui il valore digitato sia esatto, quello in cui esso sia maggiore di quello atteso e quello in cui esso sia invece inferiore. Prevedendo tali eventualità in altrettante condizioni non sarà necessario il ricorso ad un’alternativa introdotta con else.
Costrutti condizionali annidati
In Python i costrutti condizionali prevedono la possibilità degli annidamenti (nested statements), questo significa che si potranno definire delle condizioni all’interno di altre condizioni. A tal proposito si analizzi il seguente esempio:
# Annidamento dei blocchi if/elif/else nei costrutti condizionali
x = 8
y = int(input("Inserisci un numero da 0 a 10: "))
if y == x:
print("Il numero inserito è esatto")
elif y > x:
print("Il numero inserito è superiore a quello atteso..")
if (y - x) == 1:
print("..ma ci sei andato molto vicino.")
else:
print("..riprova, sarai più fortunato.")
elif y < x:
print("Il numero inserito è inferiore a quello atteso")
if (x - y) == 1:
print("..ma ci sei andato molto vicino.")
else:
print("..riprova, sarai più fortunato.")
La piccola applicazione proposta non si limita a controllare che il valore proposto dall’input dell’utente sia uguale, maggiore o inferiore a quello atteso, ma verifica anche il grado di approssimazione di tale valore a quello esatto. Uno scostamento unitario in eccesso o in difetto verrà notificato tramite un’apposita segnalazione aggiuntiva ("..ma ci sei andato molto vicino."), scostamenti più elevati porteranno alla stampa di un’alternativa introdotta tramite else ("..riprova, sarai più fortunato.")