- Home
- iThink
- Programmazione per Ragazzi
- Controllo di flusso in Python: if, for e while
Controllo di flusso in Python: if, for e while
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:
andsi ferma al primoFalse,oral primoTrue. 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:
ifobbligatorio,elif/elseopzionali- Solo un blocco viene eseguito (il primo
True) elsecattura 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/oro 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/exceptgestisce input non numerico (anticipazione gestione errori)elsesulwhile= "se il ciclo finisce naturalmente"breakesce subito,continuesalta 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
- FizzBuzz classico: Stampa 1-100. Multipli di 3 → "Fizz", 5 → "Buzz", entrambi → "FizzBuzz"
- Tabellina: Chiedi numero, stampa tabellina 1-10 con
for - Menu interattivo:
while Truecon opzioni 1-4 + "Esci",breaksu "Esci" - Conteggio alla rovescia:
forda 10 a 1, poi "VIA!" - Somma numeri pari:
whileche 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/elsecorrettamente indentati - [ ] Scrivi
whilecon variabile che cambia (evita loop infiniti) - [ ] Usi
forconrange(start, stop, step) - [ ] Conosci
breakecontinue
Prossimo capitolo
Capitolo 4: Funzioni — def, parametri, return, scope, docstring: il principio DRY (Don't Repeat Yourself) per ragazzi. Impareremo a incapsulare logica riutilizzabile.
Serie "Divento Programmatore: Python e i Giochi" (Cervello Elettronico Vol.2). Codice completo, tabelle, esercizi. Target 10-14 anni + guide adulti.
Per approfondire
- Quiz show in Python: un gioco a domande passo per passo
- Battaglia navale in Python: liste, cicli e logica di gioco
- Indovina il numero: il primo gioco in Python
- Corsi e percorsi di programmazione