1. Home
  2. iThink
  3. Programmazione per Ragazzi
  4. Controllo di flusso in Python: if, for e while
Programmazione per Ragazzi Divento Programmatore · Capitolo 3

Controllo di flusso in Python: if, for e while

Codice Python sullo schermo di un computer
Foto: JohnsonMartin · Pixabay · Licenza dei contenuti Pixabay

Divento Programmatore — Capitolo 3: Controllo di flusso

Finora i nostri script erano lineari: riga 1, riga 2, riga 3... sempre uguali. Ora il codice sceglie e ripete. È qui che la programmazione diventa potente.

Cosa imparerai

| Concetto | Descrizione | | ---------- | ------------- | | Boolean logic | True/False, and, or, not | | Operatori confronto | ==, !=, <, >, <=, >= | | if / elif / else | Decisioni a più vie | | while | Ripeti finché condizione vera | | for + range() | Ripeti un numero preciso di volte | | break / continue | Controllo fine del ciclo |


1. Ripasso: i booleani

Già visti nel Cap. 2: True e False.

acceso = True
spento = False
print(type(acceso))  # <class 'bool'>

Operatori logici

| Operatore | Significato | Esempio | Risultato | | ----------- | ------------- | --------- | ----------- | | and | Entrambi veri | True and False | False | | or | Almeno uno vero | True or False | True | | not | Inverte | not True | False |

Tabella verità (memorizza queste 4 righe):

| A | B | A and B | A or B | not A | | --- | --- | --------- | -------- | ------- | | T | T | T | T | F | | T | F | F | T | F | | F | T | F | T | T | | F | F | F | F | T |

Short-circuit: and si ferma al primo False, or al primo True. Utile per evitare errori:

# Se lista vuota, len() non serve grazie a short-circuit
if lista and len(lista) > 5:
    print("Lista lunga")

2. Operatori di confronto (restituiscono bool)

| Operatore | Significato | Esempio | Risultato | | ----------- | ------------- | --------- | ----------- | | == | Uguale a | 5 == 5 | True | | != | Diverso da | 5 != 3 | True | | < | Minore | 3 < 5 | True | | > | Maggiore | 5 > 3 | True | | <= | Minore o uguale | 5 <= 5 | True | | >= | Maggiore o uguale | 3 >= 5 | False |

Attenzione: = assegna, == confronta. Errore classico:

if eta = 18:   # SyntaxError! Assegnazione non permessa in if
if eta == 18:  # Corretto: confronto

3. Struttura if / elif / else

Sintassi base

if condizione:
    # codice se True (indentato 4 spazi)
elif altra_condizione:
    # codice se prima False e questa True
else:
    # codice se tutte False

Esempio: classificazione età

eta = int(input("Età: "))

if eta < 6:
    categoria = "Prima infanzia"
elif eta < 12:
    categoria = "Bambino"
elif eta < 18:
    categoria = "Ragazzo"
elif eta < 65:
    categoria = "Adulto"
else:
    categoria = "Senior"

print(f"Categoria: {categoria}")

Regole d'oro:

  • if obbligatorio, elif/else opzionali
  • Solo un blocco viene eseguito (il primo True)
  • else cattura tutto il resto
  • Indentazione = 4 spazi (Thonny: premi Tab)

4. Annidamento (nested if)

punteggio = 85
ha_bonus = True

if punteggio >= 60:
    print("Promosso!")
    if ha_bonus:
        print("  + Bonus merito!")
else:
    print("Bocciato")
    if punteggio >= 50:
        print("  Ma recuperabile a settembre")

Consiglio: Evita annidamenti > 2 livelli. Riscrivi con and/or o funzioni (Cap. 4).


5. Espressioni condizionali (ternario)

Per scelte brevi su una riga:

eta = 20
stato = "maggiorenne" if eta >= 18 else "minorenne"
print(stato)  # maggiorenne

# Equivalente a:
if eta >= 18:
    stato = "maggiorenne"
else:
    stato = "minorenne"

6. Ciclo while: ripeti finché vero

contatore = 1
while contatore <= 5:
    print(f"Giro {contatore}")
    contatore += 1   # Fondamentale! Altrimenti loop infinito

print("Finito!")

Output:

Giro 1
Giro 2
Giro 3
Giro 4
Giro 5
Finito!

Loop infinito intenzionale (con break)

while True:
    cmd = input("Comando (q per uscire): ")
    if cmd == "q":
        break       # Esce dal while
    print(f"Eseguo: {cmd}")

continue: salta al prossimo giro

n = 0
while n < 10:
    n += 1
    if n % 2 == 0:   # Pari? Salta stampa
        continue
    print(n)         # Stampa solo dispari: 1,3,5,7,9

7. Ciclo for + range(): ripeti N volte

range() genera sequenze di numeri.

# range(stop) -> 0, 1, ..., stop-1
for i in range(5):
    print(i)
# 0 1 2 3 4

# range(start, stop) -> start, ..., stop-1
for i in range(1, 6):
    print(i)
# 1 2 3 4 5

# range(start, stop, step)
for i in range(0, 10, 2):
    print(i)
# 0 2 4 6 8

# Al contrario
for i in range(5, 0, -1):
    print(i)
# 5 4 3 2 1

range() non crea lista (risparmia memoria)

# range(1_000_000) usa poca memoria, non crea 1M interi in RAM
for i in range(1_000_000):
    pass  # Fa niente, ma itera veloce

8. Iterare su sequenze (stringhe, liste - anticipazione Cap. 5)

parola = "Python"
for lettera in parola:
    print(lettera)

# Con indice
for i, lettera in enumerate(parola):
    print(f"{i}: {lettera}")

9. Script completo: Indovina il numero

# indovina_numero.py
import random

print("=== INDOVINA IL NUMERO ===")
print("Penso a un numero 1-100. Quanti tentativi?\n")

segreto = random.randint(1, 100)
tentativi = 0
max_tentativi = 7

while tentativi < max_tentativi:
    try:
        guess = int(input(f"Tentativo {tentativi+1}/{max_tentativi}: "))
    except ValueError:
        print("  Scrivi un numero intero!")
        continue

    tentativi += 1

    if guess == segreto:
        print(f"\n🎉 BRAVO! Il numero era {segreto}.")
        print(f"Ci hai messo {tentativi} tentativi.")
        break
    elif guess < segreto:
        print("  Troppo BASSO ↑")
    else:
        print("  Troppo ALTO ↓")

else:   # else del while: eseguito se NON c'è break
    print(f"\n💥 Finite le possibilità! Era {segreto}.")

print("\nGrazie per aver giocato!")

Punti chiave:

  • try/except gestisce input non numerico (anticipazione gestione errori)
  • else sul while = "se il ciclo finisce naturalmente"
  • break esce subito, continue salta il resto dell'iterazione

10. Tabella riassuntiva: quando usare cosa

| Situazione | Struttura migliore | | ------------ | ------------------- | | "Se X fai A, altrimenti B" | if/else | | "Controlla più casi in ordine" | if/elif/elif/else | | "Ripeti finché condizione" | while | | "Ripeti N volte noto" | for i in range(N) | | "Per ogni elemento in collezione" | for x in collezione | | "Esci subito dal ciclo" | break | | "Salta resto iterazione" | continue |


11. Esercizi pratici

  1. FizzBuzz classico: Stampa 1-100. Multipli di 3 → "Fizz", 5 → "Buzz", entrambi → "FizzBuzz"
  2. Tabellina: Chiedi numero, stampa tabellina 1-10 con for
  3. Menu interattivo: while True con opzioni 1-4 + "Esci", break su "Esci"
  4. Conteggio alla rovescia: for da 10 a 1, poi "VIA!"
  5. Somma numeri pari: while che chiede numeri finché non scrivi 0, somma solo i pari

12. Checklist fine capitolo

  • [ ] Scrivi condizioni con ==, !=, <, >, <=, >=
  • [ ] Combini booleani con and, or, not
  • [ ] Usi if/elif/else correttamente indentati
  • [ ] Scrivi while con variabile che cambia (evita loop infiniti)
  • [ ] Usi for con range(start, stop, step)
  • [ ] Conosci break e continue

Prossimo capitolo

Capitolo 4: Funzioni — def, parametri, return, scope, docstring: il principio DRY (Don't Repeat Yourself) per ragazzi. Impareremo a incapsulare logica riutilizzabile.

👉 Leggi il Capitolo 4 →


Serie "Divento Programmatore: Python e i Giochi" (Cervello Elettronico Vol.2). Codice completo, tabelle, esercizi. Target 10-14 anni + guide adulti.

Per approfondire

Fonti e riferimenti

Condividi LinkedIn Facebook X WhatsApp
Continua a leggere

Tutti gli articoli del blog

Strumenti gratuiti