P.19 Il ciclo While

A volte abbiamo bisogno di ripetere delle operazioni senza sapere quando sarà necessario terminare. Immaginate di voler costruire un sistema automatico per riscaldare una pentola d’acqua con una resistenza elettrica. Un sensore misurerà la temperatura per poter spegnere l’elemento riscaldante quando abbiamo raggiunto la temperatura di 100°C. Il codice di controllo:

  • attiva l’elemento riscaldante;
  • misura la temperatura del liquido;
  • se la temperatura è pari a 100°C interrompe la sequenza di riscaldamento.

È chiaro che il tempo necessario per riscaldare l’acqua dipenderà dalla sua quantità e quindi non sappiamo a priori quante iterazioni saranno necessarie. In questi casi è preferibile utilizzare l’istruzione while, che ripete delle istruzioni fino a che la condizione che controlla è vera (funziona un po’ come se fosse un if).

Per realizzare un conteggio da 0 a 4 possiamo scrivere:

count = 0
while (count < 5):
	print(count, end=” ”)
	count += 1 

Listato 1.30 – Programma per contare da 0 a 4 utilizzando un ciclo while.

Utilizziamo una variabile count, inizialmente a 0. Eseguiremo il corpo del ciclo while fino a che count è minore di 5. Ad ogni iterazione stamperemo il valore di count con una print(). L’ultima istruzione del ciclo while è quella che incrementa il valore di count di una unità. In forma compatta scriveremo:

count += 1

che equivale a:

count = count + 1

Eseguendo il codice otterremo la sequenza:

0 1 2 3 4 

Il ciclo while è indicato nel caso volessimo creare un programma che stampa numeri casuali fino a che non estraiamo il 7. Per ottenere dei numeri casuali utilizzeremo l’istruzione randind(0, 9) che genera numeri a caso tra 0 e 9. La condizione del ciclo while sarà:

while not(n == 7):

La variabile n, che contiene i numeri casuali va creata prima del ciclo while e conterrà inizialmente il valore 0. Alla prima esecuzione del ciclo incontriamo il test:

not (n == 7)

Quindi con n pari a 0, (n == 7) sarà False. Per entrare nel corpo del ciclo abbiamo bisogno di “ribaltare” il suo valore booleano. Anteponiamo la negazione not. Ora la scrittura not (n == 7) avrà il valore True fino a che n non varrà 7, interrompendo le ripetizioni.

import random
n = 0;
while not(n == 7):
    n = random.randint(0,10)
    print(n, end=”, ”)
print("Ho trovato il 7!")

Listato 1.31 – Programma per generare generare numeri fino a che non si ottiene il 7.

Eseguendo il codice otterremo una sequenza simile alla seguente:

10, 6, 3, 1, 9, 7, Ho trovato il 7!

I numeri del Lotto

Proviamo a scrivere un programma che ci fornisca i numeri per giocare al Lotto fino a che ne abbiamo necessità. Dopo ogni estrazione, ci verrà chiesto se desideriamo proseguire e potremo rispondere con “s” o “n”.

Utilizzeremo la libreria random per generare numeri casuali. Creiamo una variabile risposta, inizialmente impostata al valore “s”:

risposta = 's'

Il ciclo while verifica se risposta è pari a “s”:

while risposta == 's':

All’interno del ciclo estraiamo un numero casuale e lo stampiamo, quindi chiediamo al giocatore se vuole proseguire. La risposta fornita a input() è inserita nella variabile risposta che sarà valutata alla prossima iterazione.

import random
risposta = 's'
while risposta == 's':
    print(random.randint(1,90))
    risposta = input('estraggo un nuovo numero (s/n)? ')

print('fine')    

Listato 1.32 – Programma per generare i numeri del Lotto.

Ecco una possibile esecuzione:

66
estraggo un nuovo numero (s/n)? s
71
estraggo un nuovo numero (s/n)? s
83
estraggo un nuovo numero (s/n)? n
fine

Cose da provare

  • Provate a creare una versione del programma che genera una lista di 10 numeri casuali, utilizzando un ciclo while anziché il for.
  • Modificate il precedente programma in modo che possiate prima scegliere quanti numeri aggiungere alla lista.
Condividi