In questa lezione impari a
- ripetere istruzioni con il ciclo while
- contare con il ciclo for e range()
- uscire da un ciclo con break o saltare un giro con continue
- scegliere il ciclo giusto per ogni problema
Un ciclo ripete un gruppo di istruzioni più volte, senza doverle riscrivere. In Flowgorithm hai usato i blocchi Mentre e Per: in Python si chiamano while e for.
Il ciclo while
while significa "finché": ripete le istruzioni finché la condizione è vera. Si usa quando non sai in anticipo quante volte dovrai ripetere.
password = ""
while password != "python":
password = input("Password: ")
print("Accesso consentito!")
Attenzione al ciclo infinito: se la condizione non diventa mai falsa, il programma non finisce più. Per fermarlo premi Ctrl + C.
Il ciclo for e range()
for si usa quando sai quante volte ripetere. Con range() generi una sequenza di numeri:
for i in range(5):
print("Giro numero", i) # stampa 0, 1, 2, 3, 4
| Scrittura | Numeri generati |
|---|---|
range(5) |
0, 1, 2, 3, 4 |
range(1, 6) |
1, 2, 3, 4, 5 |
range(0, 11, 2) |
0, 2, 4, 6, 8, 10 |
range(10, 0, -1) |
10, 9, 8, … 1 |
Il numero di arrivo non è mai compreso:
range(1, 6)si ferma a 5.
break e continue
breakesce subito dal ciclocontinuesalta il giro attuale e passa al successivo
for n in range(1, 11):
if n == 3:
continue # salta il 3
if n == 7:
break # si ferma al 7
print(n) # stampa 1, 2, 4, 5, 6
while o for?
| Situazione | Ciclo |
|---|---|
| Ripeti un numero preciso di volte | for |
| Ripeti finché succede qualcosa (l'utente indovina, scrive "fine"…) | while |
Esercizi
Esercizio 1 – La tabellina. Chiedi un numero e stampa la sua tabellina fino a 10.
Mostra la soluzione
n = int(input("Quale tabellina? "))
for i in range(1, 11):
print(n, "x", i, "=", n * i)
Esercizio 2 – Conto alla rovescia. Stampa i numeri da 10 a 1 e poi "Via!".
Mostra la soluzione
for i in range(10, 0, -1):
print(i)
print("Via!")
Esercizio 3 – La somma. L'utente inserisce numeri uno alla volta; quando scrive 0 il programma stampa la somma di tutti i numeri inseriti.
Mostra la soluzione
somma = 0
numero = int(input("Numero (0 per finire): "))
while numero != 0:
somma = somma + numero
numero = int(input("Numero (0 per finire): "))
print("La somma è", somma)
Esercizio 4 – Il triangolo. Chiedi un'altezza e disegna un triangolo di asterischi. Con altezza 4:
*
**
***
****
Mostra la soluzione
altezza = int(input("Altezza: "))
for riga in range(1, altezza + 1):
print("*" * riga)
Progetto finale: Indovina il numero
Riprendi l'esercizio della lezione 4 e miglioralo: il computer pensa un numero da 1 a 100, l'utente prova finché non indovina, il programma dice ogni volta "più alto" o "più basso" e alla fine stampa quanti tentativi sono serviti.
È lo stesso progetto che hai costruito con Flowgorithm: confronta i due e noterai che la logica è identica.
Mostra la soluzione
import random
segreto = random.randint(1, 100)
tentativi = 0
tentativo = 0
while tentativo != segreto:
tentativo = int(input("Indovina (1-100): "))
tentativi = tentativi + 1
if tentativo < segreto:
print("Più alto!")
elif tentativo > segreto:
print("Più basso!")
print("Hai indovinato in", tentativi, "tentativi!")
Sfida: FizzBuzz
Stampa i numeri da 1 a 30, ma al posto dei multipli di 3 scrivi Fizz, al posto dei multipli di 5 scrivi Buzz e al posto dei multipli di entrambi scrivi FizzBuzz. È un classico dei colloqui di lavoro per programmatori!