Vai al contenuto

Ripetere con i cicli

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

  • break esce subito dal ciclo
  • continue salta 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!