Ripetizioni con while

Il ciclo while ripete l’esecuzione del blocco di istruzioni finché una certa condizione (espressione logica) è vera

Osserva

  1. prima di entrare si controlla il valore di A
  2. si eseguono un certo numero di istruzioni (un blocco)
  3. alla fine il controllo torna su per ripetere eventualmente l’esecuzione del blocco
  4. se il controllo non viene superato il controllo passa all’istruzione immediatamente successiva al ciclo while 
  5. se il valore di A non viene modificato dalle istruzioni interne si ottiene un ciclo senza fine…
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!

while(True):
    istr_1
    istr_2

Indice

La situazione in cui il valore di una variabile controlla il ciclo è molto frequente

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

  1. inizializzata prima che il ciclo inizi
  2. controllata prima di ogni entrata
  3. utilizzata all’interno del blocco di istruzioni
  4. 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

i=5.0  
while(i <= 10.0):     
    print(i, end=" ")
    i += 0.5
5.0 5.5 6.0 
... 9.5 10.0

Da 5.0 a 10.0, con i mezzi

Esempio 2

i=5.0
while(i < 10.0):
    print(i, end=" ")
    i += 0.25 
5.0 5.25 5.5 
... 9.5 9.75   

Da 5.0 a 10.0 (escluso), con i quarti

Esempio 3

p=2 
while(p <= 1000):
    print(p, end=" ")
    p *= 2  
2 4 8 16 32 64
128 256 512

Le potenze di 2 che non superano 1000

Esempio 4

import random

dado=0 
while(dado != 6):     
    dado=random.randint(1,6)     
    print(dado)
... ... 6

Lancio del dado finché non esce 6