Curiosità costrutti while e for

francesco.dev (33560 points)
14 51 129
asked Oct 1, 2017 in Programmare in Python by francesco.dev (33,560 points)
reshown Oct 3, 2017 by francesco.dev
Ciao a tutti!
Ho notato che nei costrutti iterativi di Python, quindi nel while e nel for, vi è la presenza di un else di tali costrutti!
Ora, la mia domanda (o, meglio, curiosità) è capire quando tale else risulterebbe utile.
Ho pensato che potrebbe essere usato per vari motivi:

per controllare se effettivamente il ciclo viene eseguito;

per sapere quando l'esecuzione del ciclo termina;

per poter compiere delle operazioni a fine ciclo.

Ho pensato a queste cose. Sicuramente ci saranno tantissimi altri casi in cui tale "else" sarà utile.
Quindi, visto che in altri linguaggi come java o c non esiste un else né del ciclo for né del ciclo while, secondo voi, anche a livello logico, per quali altri motivi potremmo utilizzarlo?

Grazie in anticipo a chi risponde a questo piccolo interrogativo!
227 views

2 Answers

Best answer
Gabriele97 (2010 points)
8 29 38
answered Oct 1, 2017 by Gabriele97 (2,010 points)
selected Oct 5, 2017 by francesco.dev
Ciao, premettendo che la mia esperienza con python è pressoché elementare, tuttavia penso che che abbia senso utilizzare un else con una condizione if precedente, ho visto esempi con istruzioni if/elif/else annidate in un ciclo.
francesco.dev (33560 points)
14 51 129
commented Oct 1, 2017 by francesco.dev (33,560 points)
Quello che dico è che Python permette di creare un else di un ciclo for o di un ciclo while, senza generare problemi!
Tale cosa sembra molto utile per i casi che ho portato e quindi può essere usato per fare una fase di testing sul ciclo stesso!
Infine so benissimo che con un costrutto di selezione possiamo creare quanti costrutti di selezione annidati vogliamo, ma il quesito qui è capire quali potrebbero essere gli altri utilizzi di un else legato solo ed esclusivamente ad un costrutto iterativo come il while o il for.
LeonardoEmili (35740 points)
11 65 155
answered Oct 1, 2017 by LeonardoEmili (35,740 points)

Ciao!
Sperando di aver compreso fino all'ultimo la tua domanda provo a risponderti..
In Python è perfettamente "legale" l'utilizzo di un ciclo while o di un ciclo for seguito da un else: . Tale costrutto, indicato col nome while: else: risulta esser molto utile in determinate circostanze. Proverò ora a farti degli esempi in pseudo-codice per chiarire meglio:

Immagina di voler utilizzare un ciclo for: /while: che esegue il blocco di codice n volte finché la condizione risulta vera, a questo punto quando la condizione diventerà falsa uscirai automaticamente dal ciclo e andrai ad eseguire il codice esterno. Immagina ora di voler prevedere una situazione di break in cui tu vuoi interrompere il tuo ciclo per un determinato motivo, a questo punto uscirai automaticamente dallo stesso e andrai ad eseguire tutto ciò che è all'esterno! Se invece utilizzi il costrutto while: else: il blocco di codice dell' else: sarà eseguito se e solo se la condizione del while: risulterà falsa. Tuttavia se la condizione di break all'interno del while: risultasse verificata oltre ad uscire dal while: neanche la condizione else: sottostante verrà eseguita.

Spero di averti aiutato!
Buona giornata!

Leonardo Emili

francesco.dev (33560 points)
14 51 129
commented Oct 1, 2017 by francesco.dev (33,560 points)
Molto interessante!
Anche io avevo pensato che potesse essere adoperato in determinati casi in cui, ad esempio, vorremmo far eseguire una serie di operazioni quando il for finisce oppure quando il while risulta essere falso.
Quindi, invece di scrivere al di sotto del costrutto (come avremmo fatto in altri linguaggi come c o java) in Python possiamo benissimo mettere questo nuovo corpo di istruzioni all'interno di questa istruzione else. Forse in Python questo è presente perché a livello di leggibilità risulta essere migliore!
LeonardoEmili (35740 points)
11 65 155
commented Oct 1, 2017 by LeonardoEmili (35,740 points)
Si credo proprio di sì! Alla fine inserire tale costrutto else: all'esterno non fa altro che migliorare la leggibilità del codice. Inoltre essendo legati tra di loro se chiedo un break al while neanche l'else verrà eseguito!