back to top

I costrutti condizionali in Python: If, Else, Elif

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:

Pubblicitร 
# 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.โ€).

Pubblicitร 
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.