
Il ciclo while ripete l’esecuzione del blocco di istruzioni finché una certa condizione (espressione logica) è vera
Osserva
- prima di entrare si controlla il valore di A
- si eseguono un certo numero di istruzioni (un blocco)
- alla fine il controllo torna su per ripetere eventualmente l’esecuzione del blocco
- se il controllo non viene superato il controllo passa all’istruzione immediatamente successiva al ciclo while
- se il valore di A non viene modificato dalle istruzioni interne si ottiene un ciclo senza fine…
1 2 3 |
while(a > 0): istr_1 istr_2 |
In alcuni casi è utile avere un ciclo senza fine: si scrive direttamente True come valore dell’espressione logica!
1 2 3 |
while(True): istr_1 istr_2 |
Indice
La situazione in cui il valore di una variabile controlla il ciclo è molto frequente.
1 2 3 4 5 6 |
a=0 # 1. Inizializzazione while(a < 10): # 2. Controllo istr_1 # 3. Utilizzo di a istr_2 # ... ... # ... a=a+1 # 4. Aggiornamento con passo 1 |
La variabile è gestita fino a 4 volte
- inizializzata prima che il ciclo inizi
- controllata prima di ogni entrata
- utilizzata all’interno del blocco di istruzioni
- aggiornata dopo aver svolto le operazioni del blocco
Se la variabile assume valori numerici progressivi diventa un indice.
Il valore utilizzato per aggiornare l’indice è il passo (step), la ragione della progressione.
L’uso del while è necessario se
- i valori dell’indice sono numeri decimali (la funzione range() di Python genera solo sequenze di numeri interi)
- il numero di ripetizioni (la durata) non è noto a priori
Esempio 1
Da 5.0 a 10.0, con i mezzi
1 2 3 4 |
i=5.0 while(i <= 10.0): print(i) # 5.0 5.5 6.0 6.5 7.0 7.5 8.0 8.5 9.0 9.5 10.0 i += 0.5 # Incremento reale |
Esempio 2
Da 5.0 a 10.0 (escluso), con i quarti
1 2 3 4 |
i=5.0 while(i < 10.0): print(i) # 5.0 5.25 5.5 5.75 6.0 ... 9.75 i += 0.25 |
Esempio 3
Le potenze di 2 che non superano 1000
1 2 3 4 |
p=2 while(p <= 1000): print(i) # 2 4 8 16 32 64 128 256 512 p *= 2 |
Esempio 4
Lancio del dado finché non esce 6
1 2 3 4 5 6 |
import random dado=0 while(dado != 6): dado=random.randint(1,6) print(dado) |