L’istruzione while¶
- Come l’istruzione
if, ilwhileusa un’espressione booleana per controllare il flusso di esecuzione. - Il corpo del while sarà ripetuto finché l’espressione è valutata
True.
La figura seguente mostra il flusso di esecuzione.
- Possiamo usare il ciclo
whileper creare qualsiasi iterazione desideriamo, includendo anche ciò che abbiamo fatto in precedenza con il ciclofor. - I programmi che abbiamo fatto con il
forpossono essere riscritti usando ilwhile. - Nel programma che fa la somma dei primi n numeri interi, anziché usare la funzione
rangedobbiamo produrre tali valori da noi. Per esempio possiamo creare una variabileaNumberinizializzata a 1, il primo numero della somma. - Ogni iterazione somma
aNumberalla somma corrente, finché non tutti i valori sono stati considerati. - Per controllare l’iterazione, dobbiamo creare una espressione booleana che viene valutata
Truefinché vogliamo continuare ad aggiungere valori al totale. In questo caso, finchéaNumberè minore o uguale al limite dobbiamo continuare a fare le somme.
Qui di seguito troviamo una nuova versione del programma che segue lo schema appena illustrato.
(ch07_while1)
(ch07_while2)
Note
I nomi delle variabili sono stati scelti per aiutare la leggibilità.
Più formalmente, questo che segue è il flusso di esecuzione dell’istruzione while:
- Valuta la condizione, ottenendo
FalseoppureTrue. - Se la condizione è
False, esce dall’istruzionewhilee continua l’esecuzione all’istruzione successiva fuori dalwhile. - Se la condizione è
True, esegue ogni istruzione nel corpo e poi ritorna al passo di valutazione della condizione.
- Il corpo consiste di tutte le istruzioni indentate sotto l’intestazione.
- Questo flusso di esecuzione è chiamato ciclo.
- Se la condizione iniziale vale
Falsela prima volta, le istruzioni nel corpo non vengono mai eseguite. - Il corpo del ciclo dovrebbe cambiare il valore di una o più variabili per far diventare la condizione
Falsee far terminare il ciclo. - Altrimenti il ciclo si ripeterà per sempre. Questo è chiamato ciclo infinito.
Nel caso mostrato sotto, possiamo dimostrare che il ciclo termina perché il valore di aBound è finito, e possiamo vedere che il valore di aNumber viene incrementato ogni volta attraverso il loop, in modo che a un certo punto superi aBound. Negli altri casi, non è facile dimostrarlo.