back to top

Il ciclo while in Python

Il ciclo while si differenzia dal ciclo for precedentemente descritto più a livello sintattico che funzionale, in generale è comunque possibile affermare che mentre nel ciclo for le iterazioni proseguono fino al verificarsi di una determinata condizione (ad esempio il raggiungimento di un dato incremento di valore a carico di una variabile), nel ciclo while le iterazioni continuano invece finché la condizione passata come argomento rimane vera.

Anche in questo caso un semplice esempio potrebbe essere di aiuto per una migliore comprensione del costrutto in discussione, l’applicazione seguente permette di stampare tutti i valori inferiori al parametro di condizione ("20") partendo dal valore associato ad una variabile precedentemente definita che verrà incrementata di 2 unità ad ogni iterazione del ciclo:

# Utilizzo del ciclo while
# per la stampa dei valori compresi tra 10 e 20
# vincolati all'incremento di una variabile

val = 10
while val < 20:
    print (val)
    val+=2

L’esecuzione del codice porterà alla stampa della sequenza composta dai valori "10 (valore di base della variabile sottoposta ad incremento), 12, 14, 16 e 18", non verrà invece restituito in output il valore "20" che, rappresentando la condizione di terminazione dell’incremento ed essendo superiore al più alto valore consentito, verrà giustamente considerato al di fuori dell’intervallo di valori ciclato.

Esattamente come nel caso di for, anche while può essere integrato tramite i blocchi condizionali, il codice dell’applicazione seguente introdurrà però una modalità inedita nella gestione degli output prodotti dai cicli e sottoposti ad una condizione introdotta tramite if:

# Utilizzo del ciclo while
# per la stampa dei valori compresi tra 10 e 20
# vincolati all'incremento di una variabile
# fino al raggiungimento del valore di confronto introdotto da if

val = 10
while val < 20:
    print (val)
    val+=2
    if val == 16:
        break

Analizzando il sorgente proposto si noterà come la prima parte, quella relativa al blocco del ciclo while, sia del tutto identica al codice dell’esempio proposto in precedenza; questa volta però è stata implementata una seconda parte contenente una condizione per la quale l’incremento della variabile di base ("val") fino ad un valore pari a "16" porterà all’arresto del ciclo che non produrrà ulteriori iterazioni. Si otterrà quindi come risultato la sequenza "10, 12 e 14", la presenza dell’istruzione break alla fine del codice consentirà di terminare il ciclo che, altrimenti, continuerebbe nel tentativo di incrementare la variabile fino all’ultimo valore inferiore a "20" e, non riuscendoci a causa della condizione dovuta ad if, porterebbe alla generazione di un loop infinito, cioè di un ciclo che potrebbe essere fermato soltanto forzando l’arresto dell’applicazione.

Il blocco if/else nei cicli

Anche se il discorso è stato affrontato parzialmente nel capitolo precedente, alla luce delle nuove features descritte fino ad ora è possibile sottolineare come un altro punto in comune tra for e while sia rappresentato dalla possibilità di utilizzare un blocco condizionale quando richiesto dalla logica dell’applicazione sviluppata. A tal proposito, si analizzi quindi un primo esempio basato sul ciclo for che sarà anche riassuntivo per molti dei costrutti analizzati fino ad ora (liste, break..):

# Applicazione interattiva basata su un ciclo for
# destinato a verificare la presenza di un valore digitato dall'utente
# all'interno di una lista precedentemente definita

# definizione della lista
fibonacci = [1,1,2,3,5,8,13,21,34,55,89,144]

# valorizzazione di una variabile
# tramite l'input digitato dall'utente
val = int(input("Digita un valore compreso nella sequenza di Fibonacci: "))

# verifica del valore inviato in input
for x in fibonacci:
    if val == x:
        print(str(val) + " è un valore corretto.")
        break
else:
    print(str(val) + " non è un valore corretto.")

In pratica, l’applicazione richiederà all’utente di digitare una cifra, quest’ultima dovrà corrispondere ad uno degli elementi presenti all’interno di una lista; nel caso in cui il valore inviato in input sia effettivamente corretto, allora verrà soddisfatta la condizione introdotta con if e il ciclo verrà interrotto tramite break, altrimenti verrà stampata l’alternativa associata ad else.

Per quanto riguarda invece il ciclo while è possibile presentare un caso forse ancora più interessante, cioè quello che prevede l’introduzione di un blocco else senza la necessità di una precedente condizione definita tramite if; ciò è possibile perché in while è presente una condizione definita esplicitamente che dovrà essere vera per consentire il proseguimento delle iterazioni:

# Uso del ciclo while per l'incremento del valore di una variabile
# fino al superamento di un valore limite gestito tramite else

val = 5
valore_limite = 50
incremento = 10

while val < valore_limite:
    print(str(val) + " è compreso nel valore limite pari a " + str(valore_limite))
    val = val + incremento
else:
    print(str(val) + " è superiore al valore limite pari a " + str(valore_limite))

L’output prodotto dall’esecuzione dell’applicazione proposta sarà il seguente:

5 è compreso nel valore limite pari a 50
15 è compreso nel valore limite pari a 50
25 è compreso nel valore limite pari a 50
35 è compreso nel valore limite pari a 50
45 è compreso nel valore limite pari a 50
55 è superiore al valore limite pari a 50

Sostanzialmente il ciclo while dell’applicazione dovrà incrementare una variabile precedentemente definita ("val") fino ad un valore inferiore a quello limite, nel caso in cui quest’ultimo dovesse essere superato l’alternativa introdotta da else si occuperà di lanciare un’apposita segnalazione.

Pubblicità
Claudio Garau
Claudio Garau
Web developer, programmatore, Database Administrator, Linux Admin, docente e copywriter specializzato in contenuti sulle tecnologie orientate a Web, mobile, Cybersecurity e Digital Marketing per sviluppatori, PA e imprese.