top of page

CICLI FOR E WHILE

a cura di Samuele Malta

Introduzione

BLOCCO ITERATIVO

Un blocco iterativo è un insieme di istruzioni (o altri blocchi) che viene ripetuto fintanto che una condizione rimane verificata. La condizione da verificare è un’operazione, o un’espressione, che produce un risultato Vero o Falso.

Ci sono due regole fondamentali nella costruzione di un ciclo:

  • deve sempre esistere almeno un caso per cui il ciclo viene eseguito;

  • deve sempre esistere almeno un caso per cui, una volta iniziata l’esecuzione delle istruzioni, vi sia la possibilità di uscire dal ciclo.

    • Per poter rispettare questa regola le istruzioni del ciclo devono andare a modificare le variabili che influenzano la condizione da verificare.

 

I blocchi iterativi si dividono in due categorie:

  • blocchi iterativi definiti: se è noto a priori il numero di volte che il ciclo verrà eseguito;

  • blocchi iterativi indefiniti: se non è noto a priori il numero di volte che il ciclo verrà eseguito.

Blocco iterativo definito

i = 0

Condizione

Azione

No

Azione risultante dal ciclo

i++

Blocco iterativo indefinito

while

Condizione

Azione

No

Azione risultante dal ciclo

BLOCCHI ITERATIVI INDEFINITI

I blocchi iterativi indefiniti si dividono a loro volta in due gruppi:

  • blocchi iterativi indefiniti a condizione finale;

  • blocchi iterativi indefiniti a condizione iniziale.

Blocchi iterativi indefiniti a condizione iniziale

In questa tipologia di blocchi indefiniti la verifica della condizione avviene prima dell’esecuzione del corpo. Le operazioni contenute all’interno del corpo potrebbero quindi essere eseguite anche zero volte, nel caso in cui la condizione non fosse mai verificata.

 

Il costrutto iterativo indefinito a condizione iniziale maggiormente conosciuto è il ciclo while.

 

Dopo la prima verifica della condizione il corpo viene eseguito la prima volta e, alla fine delle operazioni, viene rivalutata la condizione: se rimane verificata il corpo viene eseguito di nuovo, fintanto che la condizione del ciclo non è più verificata. Una volta che la condizione non è più verificata, al termine dell’esecuzione del ciclo si esce dal blocco e si esegue l'istruzione immediatamente successiva.

Qui sotto trovi un esempio svolto: osserva la sintassi utilizzata e prova anche tu a sperimentare con il codice!

Blocchi iterativi indefiniti a condizione finale

A differenza dei blocchi iterativi a condizione iniziale, in quelli a condizione finale la verifica non avviene prima dell’esecuzione del corpo ma, come suggerisce il nome, dopo. Questo significa che il corpo viene sempre eseguito almeno una volta.

 

Il costrutto più noto appartenente a questa categoria è il ciclo do-while.

 

Vengono eseguite le espressioni del corpo e dopo ogni esecuzione viene verificata l’espressione: se l’espressione viene verificata si ripete il ciclo, quando l’espressione risulta non verificata si esce dal ciclo e si procede con l’esecuzione dell'istruzione successiva.

Blocco iterativo do-while

do-while

Azione

Condizione

Falso

Vero

Attenzione!

Nel linguaggio di programmazione Python non esiste un costrutto assimilabile ad un ciclo do-while. L'argomento è stato introdotto dal punto di vista teorico per completezza, ma non può essere implementato attraverso esercizi pratici.

BLOCCHI ITERATIVI DEFINITI

Nei blocchi iterativi definiti è noto a priori il numero di esecuzioni che avverrà.

 

Sono caratterizzati da un’inizializzazione, una verifica della condizione e una modifica della variabile di controllo.

 

Il ciclo iterativo definito più famoso è il ciclo for, in cui è possibile specificare come ripetere l’esecuzione del corpo del ciclo.

Il ciclo for

Il ciclo for è molto utilizzato per iterare sulle strutture dati, ma di questo parleremo nella prossima lezione.

Normalmente viene utilizzato insieme alla funzione range(). Questa funzione, in forma generica, viene espressa come range(inizio, fine, step), e restituisce una sequenza di numeri che inizia dal parametro inizio e finisce appena prima del parametro fine. Il parametro step, invece, indica la differenza tra un numero nella sequenza e il precedente.

Ad esempio, la funzione range(1, 5, 1) restituisce la sequenza [1, 2, 3, 4]: nota come il numero 5, cioè il parametro fine, non è incluso nella sequenza, e la differenza tra qualsiasi numero e il precedente è sempre 1, cioè il parametro step.

Secondo lo stesso principio, la funzione range(5, 0, -1) restituisce la sequenza [5, 4, 3, 2, 1]: nota come un parametro step negativo rende la sequenza decrescente.

Qui sotto trovi un esempio della sintassi di un ciclo for in Python: prova a cambiare i parametri di range() e guarda cosa succede!

Attenzione!

Tra i parametri di range(), l'unico indispensabile è fine: infatti, se non vengono specificati, ai parametri inizio e step vengono assegnati i valori di default, rispettivamente 0 e 1.

Quindi è possibile usare la notazione range(1, 5) per ottenere [1, 2, 3, 4] senza specificare step, e la notazione range(4) per ottenere [1, 2, 3].

Non è però possibile utilizzare una notazione come range(5, -1), dove viene specificato il parametro step ma non il parametro inizio: si può omettere step, si possono omettere inizio e step, ma non si può mai omettere solo inizio.

PROVA TU!

Adesso è ora di metterti alla prova: hai visto la sintassi dei cicli while e for in Python, utilizzala per risolvere gli esercizi qui sotto!

Esercizio 1

Implementare un programma in Python che, dati due interi che rappresentano rispettivamente il tasso di propagazione di un virus (quante nuove persone si ammalano giorno per ogni persona già malata) e il numero di persone di una popolazione, restituisca quanti giorni sono necessari perché si ammali almeno la metà della popolazione, partendo da 1 persona malata il primo giorno.

1   malati=1

2   giorni=0

3   persone = int(input("Inserisci il numero di persone"))

4   tasso = int(input ("Inserisci tasso di contagio"))

5   while malati<(persone/2):

6      malati=malati+(malati*tasso)

7      giorni=giorni+1

8   print('Giorni necessari per contagiare almeno metà delle persone: '

    + str(giorni))

Esercizio 2

Si supponga che l’andamento della popolazione di una colonia di batteri si sviluppi nel seguente modo: un anno raddoppia, l’anno successivo cala di un terzo.
Creare un programma che dato un valore iniziale della popolazione e un valore da raggiungere di popolazione dica quanti anni ci mette quella popolazione a raggiungere o superare quel valore.

1   pop=int(input('La popolazione iniziale di batteri è: '))

2   pop_target=int(input('La popolazione target è: '))

3   anni=0

4   while pop<pop_target:

5      if anni%2==0:

6         pop=pop*2

7      else

8         pop=pop*(2/3)

9      anni=anni+1

10   print('Il numero di anni per raggiungere il target è: ' +str(anni))

Esercizio 3

Scrivere un programma che stampi a video i numeri interi pari compresi tra due estremi a e b, b compreso. Il programma deve anche indicare quanti sono i numeri pari e i numeri dispari.

1   a=int(input('Inserire il numero a: '))

2   b=int(input('Inserire il numero b: '))

3   pari=dispari=0

4   for contatore in range(a,b+1,+1):

5      if (contatore%2==0):

6         pari=pari+1

7         print(contatore)

8      else

9         dispari=dispari+1

10  print('I numeri dispari sono in totale: '+str(dispari))

11  print('I numeri pari sono in totale: '+str(pari))

Esercizio 4

Scrivere i primi n numeri della successione di Fibonacci (i primi due numeri sono 0 e 1, i successivi sono il risultato della somma dei due numeri precedenti nella successione).

I primi 7 numeri della successione sono: [0, 1, 1(=0+1), 2(=1+1), 3(=1+2), 5(=2+3), 8(=3+5)].

1   n=int(input('Inserisci numero di elementi della serie da raggiungere: '))

2   if n==0:

3      error

4   else:

5      a,b=0,1

6      print(a)

7      print(b)

8      for i in range(1,N,+1):

9         aux=a

10        a,b=b,aux+b

11        print(b)

CONCLUSIONE

Complimenti, hai completato la lezione 4!

In questa lezione hai imparato cos'è un blocco iterativo e le più importanti caratteristiche dei cicli while e for, per poi osservare e utilizzare la relativa sintassi in Python negli esercizi.

Usa i pulsanti qui sotto per avanzare alla prossima lezione o per tornare alla home del corso.

bottom of page