Come la maggior parte dei linguaggi di programmazione e sviluppo, anche Python mette a disposizione dei programmatori i cosiddetti costrutti condizionali; in sostanza, si tratta di espressioni il cui esito, cioรจ il risultato prodotto, dipende dalla soddisfazione o meno di una condizione precedentemente definita. Nella definizione di un costrutto condizionale si utilizzano le keyword if, elif ed else. Gli esempi proposti di seguito ne evidenzieranno il funzionamento.
Il costrutto 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 a 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")
Con lo script proposto, lโutente puรฒ 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.
Tuttavia, il codice proposto, per quanto funzionante, risulta incompleto, poichรฉ non prevede alcun comportamento per i casi in cui lโuguaglianza richiesta dalla condizione introdotta da if non venga soddisfatta. A questo proposito, รจ quindi possibile aumentare le funzionalitร previste facendo ricorso alla keyword else.
Il costrutto else
else consente di definire unโistruzione alternativa che verrร eseguita quando una condizione imposta tramite if non dovesse verificarsi. A titolo di esempio, possiamo ampliare 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 deve essere preceduta da if seguito dal simbolo dei due punti (:
), esattamente come accade per if. Nel caso in cui il valore passato a 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 iniziale; tuttavia, cosa accadrebbe se lโutente dovesse inserire un valore presente al di fuori dellโintervallo consentito, cioรจ tra 0
e 10
? In questo caso specifico, non รจ stato ancora definito alcun controllo.
Il costrutto elif
elif รจ una parola chiave che, come else, introduce unโistruzione alternativa nei costrutti condizionali, ma lโesecuzione di questโultima sarร vincolata a 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, lโapplicazione valuterร una seconda condizione, introdotta da elif, e anchโessa seguita dal simbolo dei :
. Questa condizione sarร soddisfatta soltanto se y
avrร 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 il valore assegnato a x
, diminuendo cosรฌ 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 suggerisce che lโapplicazione potrร funzionare correttamente 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 a unโalternativa introdotta con else.
Costrutti condizionali annidati
In Python, i costrutti condizionali prevedono la possibilitร di annidare (nested statements) 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, sia in eccesso che in difetto, verrร notificato tramite unโapposita segnalazione aggiuntiva (โ..ma ci sei andato molto vicino.โ), mentre scostamenti piรน elevati porteranno alla stampa di unโalternativa introdotta tramite else (โ..riprova, sarai piรน fortunato.โ).