- Home
- iThink
- Programmazione per Ragazzi
- Indovina il numero: il primo gioco in Python
Indovina il numero: il primo gioco in Python
Divento Programmatore — Capitolo 1: Il tuo primo gioco: Indovina il Numero
Obiettivi di Apprendimento
Al termine di questo capitolo avrai costruito il tuo primo gioco funzionante e imparerai a:
- Scrivere ed eseguire il tuo primo programma Python in Thonny
- Usare le variabili per memorizzare dati (nomi, numeri, punteggi)
- Generare numeri casuali con la libreria
random - Raccogliere input dall'utente con la funzione
input() - Prendere decisioni nel codice con
if,elifeelse - Ripetere azioni con il ciclo
while - Migliorare il gioco con sfide bonus: vite, difficoltà, punteggio
Termini Fondamentali
| Termine | Simbolo | Significato | | --------- | --------- | ------------- | | Programma | 💻 | Sequenza di istruzioni che il computer esegue | | Variabile | 📦 | Cassetto con etichetta che memorizza un valore | | Libreria | 📚 | Raccolta di funzioni pronte all'uso | | input() | ⌨️ | Legge ciò che l'utente scrive da tastiera | | print() | 🖨️ | Mostra testo a schermo | | random.randint(a, b) | 🎲 | Genera numero intero casuale tra a e b | | int() | 🔢 | Converte testo in numero intero | | if / elif / else | 🔀 | Struttura decisionale | | while | 🔁 | Ciclo che si ripete finché una condizione è vera | | Bug | 🐛 | Errore nel codice |
La Storia: Come è nato il gioco più semplice del mondo
1971. Don Daglow, giovane programmatore, se ne sta davanti a uno dei primi computer dell'università: un bestione che si mangiava mezza stanza. Gli studenti normali potevano toccarlo solo di notte, quando i prof erano a dormire. Don aveva un'idea in testa: un gioco. Niente grafica, niente suoni. Solo un terminale che sputava lettere su carta, una alla volta. E con quella roba lì tirò fuori il gioco più semplice della storia dell'informatica: il computer pensa un numero a caso, tu lo devi indovinare. Tutto qui.
Cinquant'anni dopo, "Indovina il Numero" è ancora il primo programma che ogni programmatore al mondo impara a costruire. Non perché sia facile — ma perché in quelle venti righe di codice sono nascosti tutti i concetti fondamentali che userai per il resto della tua carriera: variabili, cicli, condizioni e interazione con l'utente.
Oggi costruirai quella stessa magia. E poi la migliorerai.
Prepara il tuo laboratorio: Thonny
Prima di scrivere codice, hai bisogno di un posto dove scriverlo. Si chiama IDE (Integrated Development Environment, ovvero Ambiente di Sviluppo Integrato): è come un quaderno intelligente che capisce il Python, colora il codice per renderlo leggibile e ti dice subito se hai fatto un errore.
Per i primi capitoli useremo Thonny: è gratuito, si installa in 2 minuti e non ha distrazioni. Perfetto per cominciare.
Installazione rapida:
- Vai su
thonny.org- Scarica la versione per il tuo sistema operativo
- Installa e apri — vedrai due finestre: in alto scrivi il codice, in basso vedi i risultati
Quando apri Thonny per la prima volta, vedrai:
- Editor (in alto): qui scrivi il tuo programma
- Shell (in basso): qui il computer risponde ed esegue il codice
Prova subito: clicca nella Shell in basso, scrivi print("Ciao mondo!") e premi Invio. Se appare Ciao mondo! sullo schermo — funziona. Sei ufficialmente un programmatore.
I Mattoncini di Base: Variabili e Tipi di Dati
Un programma senza variabili è come una cucina senza cassetti: dove metti le cose? Le variabili sono i contenitori della memoria del tuo programma.
# Creiamo alcune variabili
nome = "Marco" # stringa di testo (str)
età = 13 # numero intero (int)
altezza = 1.72 # numero decimale (float)
ha_vinto = False # vero o falso (bool)
print("Ciao,", nome)
print("Hai", età, "anni")
💡 Il simbolo
#introduce un commento: il computer lo ignora completamente. Serve a te e agli altri programmatori per capire cosa fa il codice.
Regole per i nomi delle variabili:
- ✅
punteggio_giocatore,vite_rimaste,numero_segreto - ✅ Usa solo lettere, numeri e underscore
_ - ❌
2variabile(non iniziare con un numero) - ❌
nome variabile(niente spazi — usa_)
La Libreria random: Insegna al Computer a Tirare i Dadi
Un computer, di natura, è una macchina deterministica: fa sempre la stessa cosa dati gli stessi input. Allora come fa a "scegliere" un numero casuale? Usa una libreria specializzata: una raccolta di funzioni già scritte da altri programmatori che puoi importare nel tuo programma.
import random # carica la libreria random
# Genera un numero intero casuale tra 1 e 100 (inclusi)
numero = random.randint(1, 100)
print("Il numero segreto è:", numero) # durante il gioco vero, NON stamperemo questo!
Esegui più volte: ogni volta ottieni un numero diverso. La funzione random.randint(a, b) genera un intero tra a e b compresi.
Parlare con l'Utente: input()
Un gioco che non interagisce con il giocatore non è un gioco — è un film. La funzione input() mette in pausa il programma, aspetta che l'utente scriva qualcosa e prema Invio, poi restituisce quel testo come stringa.
nome = input("Come ti chiami? ")
print("Benvenuto,", nome + "!")
Attenzione importante: input() restituisce sempre una stringa (testo), anche se l'utente scrive un numero. Per usarla come numero devi convertirla:
# SBAGLIATO — confronta testo con numero, non funziona
risposta = input("Indovina: ")
if risposta > 50: # ❌ Errore! Non puoi confrontare str con int
print("Troppo alto")
# GIUSTO — converti prima con int()
risposta = int(input("Indovina: "))
if risposta > 50: # ✅ Funziona!
print("Troppo alto")
Prendere Decisioni: if, elif, else
Il codice deve saper reagire in modo diverso a situazioni diverse. La struttura if/elif/else è il cervello decisionale del programma:
temperatura = 35
if temperatura > 30:
print("Fa caldo! 🥵")
elif temperatura > 20:
print("Temperatura perfetta 😊")
elif temperatura > 10:
print("Un po' fresco 🧥")
else:
print("Fa freddo! 🥶")
Regola fondamentale: il codice dentro un if deve essere indentato (rientrato) con 4 spazi o un Tab. L'indentazione dice a Python "questo blocco appartiene a questa condizione". Se dimentichi l'indentazione, Python si arrabbia con un IndentationError.
# SBAGLIATO
if True:
print("ciao") # ❌ IndentationError
# GIUSTO
if True:
print("ciao") # ✅ 4 spazi di rientro
Ripetere Azioni: Il Ciclo while
Nel gioco "Indovina il Numero" il giocatore può sbagliare più volte. Il programma deve continuare a chiedere finché non indovina. Questo è il lavoro del ciclo while:
contatore = 0
while contatore < 5:
print("Contatore vale:", contatore)
contatore = contatore + 1 # oppure: contatore += 1
print("Fine! Il ciclo ha girato 5 volte.")
Il ciclo while funziona così:
- Controlla la condizione (
contatore < 5) - Se è vera → esegue il blocco indentato → torna al punto 1
- Se è falsa → esce dal ciclo e continua
⚠️ Loop infinito: se la condizione non diventa mai falsa, il programma gira per sempre! In Thonny puoi fermarlo con il pulsante ⏹ rosso o con
Ctrl+C.
Costruiamo il Gioco: Versione Base
Ora hai tutti i mattoncini. Mettiamoli insieme:
import random
# 1. Il computer sceglie il numero segreto
numero_segreto = random.randint(1, 100)
tentativi = 0
indovinato = False
print("=" * 40)
print(" 🎲 INDOVINA IL NUMERO! 🎲")
print(" Ho scelto un numero tra 1 e 100.")
print("=" * 40)
# 2. Il ciclo di gioco
while not indovinato:
tentativo = int(input("\nIl tuo tentativo: "))
tentativi += 1
if tentativo < numero_segreto:
print("📉 Troppo basso! Prova più in alto.")
elif tentativo > numero_segreto:
print("📈 Troppo alto! Prova più in basso.")
else:
indovinato = True
# 3. Messaggio di vittoria
print("\n🎉 BRAVO! Hai indovinato il numero", numero_segreto, "!")
print("Ci hai messo", tentativi, "tentativi.")
Copia questo codice in Thonny, salvalo come indovina_numero.py e premi ▶. Gioca!
Leggi il codice riga per riga:
random.randint(1, 100)→ numero casuale tra 1 e 100indovinato = False→ variabile booleana che diventaTruequando il giocatore vincewhile not indovinato→ continua finchéindovinatoèFalsetentativi += 1→ abbreviazione ditentativi = tentativi + 1"=" * 40→ stampa 40 volte il carattere=(trucco per fare linee decorative)
Sfide: Migliora il tuo Gioco
Il gioco funziona, ma può diventare molto più bello. Prova queste sfide in ordine di difficoltà:
Sfida 1 — Il Giudice dei Tentativi
Aggiungi un messaggio finale diverso in base al numero di tentativi:
- 1-3 tentativi → "Sei un genio! Voto: LEGGENDA 🏆"
- 4-6 tentativi → "Ottimo! Voto: ESPERTO 🥇"
- 7-10 tentativi → "Bene! Voto: BRAVO 🥈"
- Oltre 10 → "Puoi fare meglio! Voto: ALLIEVO 📚"
# Aggiungi DOPO il ciclo while, prima di print("\n🎉 BRAVO!...")
if tentativi <= 3:
voto = "LEGGENDA 🏆"
elif tentativi <= 6:
voto = "ESPERTO 🥇"
elif tentativi <= 10:
voto = "BRAVO 🥈"
else:
voto = "ALLIEVO 📚"
Sfida 2 — Vite Limitate
Il giocatore ha solo 7 tentativi prima di perdere. Modifica il ciclo while per tenere conto delle vite:
MAX_TENTATIVI = 7 # prova a cambiare questo numero!
while not indovinato and tentativi < MAX_TENTATIVI:
...
# Dopo il ciclo, controlla se ha vinto o perso
if indovinato:
print("🎉 Hai vinto!")
else:
print("💀 Hai esaurito i tentativi! Il numero era:", numero_segreto)
Sfida 3 — Tre Livelli di Difficoltà
All'inizio del gioco, chiedi al giocatore che difficoltà vuole:
- Facile: numero tra 1 e 20, 10 tentativi
- Medio: numero tra 1 e 100, 7 tentativi
- Difficile: numero tra 1 e 500, 5 tentativi
print("Scegli la difficoltà:")
print(" 1 - Facile (1-20, 10 tentativi)")
print(" 2 - Medio (1-100, 7 tentativi)")
print(" 3 - Difficile (1-500, 5 tentativi)")
scelta = input("La tua scelta (1/2/3): ")
if scelta == "1":
massimo = 20
MAX_TENTATIVI = 10
elif scelta == "2":
massimo = 100
MAX_TENTATIVI = 7
else:
massimo = 500
MAX_TENTATIVI = 5
numero_segreto = random.randint(1, massimo)
Sfida 4 — Gioca ancora?
Dopo la partita, chiedi se il giocatore vuole rigiocare. Avvolgi tutto il gioco in un ciclo esterno while True e usa break per uscire:
while True:
# ... tutto il codice del gioco qui dentro ...
ancora = input("\nVuoi giocare ancora? (s/n): ")
if ancora.lower() != "s":
print("Grazie per aver giocato! Alla prossima! 👋")
break
Il tuo Primo Bug: Cosa succede se l'utente non inserisce un numero?
Prova questo: esegui il gioco e invece di un numero scrivi "ciao". Vedrai un errore così:
ValueError: invalid literal for int() with base 10: 'ciao'
Il programma va in crash perché int("ciao") è impossibile. Come si risolve? Con la gestione degli errori — lo vedremo nel Capitolo 4. Per ora tienilo a mente: i programmi reali devono sempre gestire gli input sbagliati degli utenti.
Il Codice Completo con Tutte le Sfide
import random
def scegli_difficolta():
"""Chiede la difficoltà e restituisce (massimo, max_tentativi)."""
print("\n🎮 Scegli la difficoltà:")
print(" 1 - Facile (1-20, 10 tentativi)")
print(" 2 - Medio (1-100, 7 tentativi)")
print(" 3 - Difficile (1-500, 5 tentativi)")
scelta = input("La tua scelta (1/2/3): ")
if scelta == "1":
return 20, 10
elif scelta == "3":
return 500, 5
else:
return 100, 7 # default: medio
def gioca():
"""Una partita completa."""
massimo, MAX_TENTATIVI = scegli_difficolta()
numero_segreto = random.randint(1, massimo)
tentativi = 0
indovinato = False
print(f"\n{'=' * 40}")
print(f" 🎲 Ho scelto un numero tra 1 e {massimo}.")
print(f" Hai {MAX_TENTATIVI} tentativi. Buona fortuna!")
print(f"{'=' * 40}")
while not indovinato and tentativi < MAX_TENTATIVI:
rimasti = MAX_TENTATIVI - tentativi
tentativo = int(input(f"\n[{rimasti} tentativi rimasti] Il tuo numero: "))
tentativi += 1
if tentativo < numero_segreto:
print("📉 Troppo basso!")
elif tentativo > numero_segreto:
print("📈 Troppo alto!")
else:
indovinato = True
if indovinato:
if tentativi <= 3:
voto = "LEGGENDA 🏆"
elif tentativi <= 6:
voto = "ESPERTO 🥇"
elif tentativi <= MAX_TENTATIVI:
voto = "BRAVO 🥈"
print(f"\n🎉 Hai indovinato in {tentativi} tentativi! Voto: {voto}")
else:
print(f"\n💀 Hai perso! Il numero era: {numero_segreto}")
# Loop principale
print("╔══════════════════════════════════════╗")
print("║ 🎲 INDOVINA IL NUMERO! 🎲 ║")
print("╚══════════════════════════════════════╝")
while True:
gioca()
ancora = input("\nVuoi giocare ancora? (s/n): ")
if ancora.lower() != "s":
print("\nGrazie per aver giocato! Alla prossima! 👋")
break
Analisi del Codice Completo
Nota come il codice finale usa le funzioni (def scegli_difficolta() e def gioca()) per organizzare il programma in blocchi logici. Il programma principale in fondo è solo 6 righe — tutto il resto è nascosto dentro funzioni chiare e riutilizzabili. Questo è il modo in cui i programmatori professionisti strutturano il codice.
Nota anche le f-string: f"Ho {tentativi} tentativi" — il modo moderno e leggibile per inserire variabili nel testo. La f prima delle virgolette dice a Python: "le cose tra {} sono variabili, non testo".
Curiosità: La Ricerca Binaria
Il numero teorico minimo di tentativi per indovinare un numero tra 1 e 100 è 7 — se usi sempre la strategia della ricerca binaria: indovina sempre il numero di mezzo tra il minimo e il massimo ancora possibili. Questo è lo stesso algoritmo che usano i computer per cercare dati in database enormi in millisecondi!
Provaci tu! — Il Torneo della Classe
Organizza un torneo con i tuoi amici. Ognuno deve indovinare lo stesso numero segreto (impostalo nel codice invece di generarlo). Chi usa meno tentativi vince. Poi discutete: qual è la strategia migliore? Chi ha iniziato dal numero 50 ha fatto meglio di chi ha iniziato da 1?
Il Piccolo Glossario
| Termine | Definizione | | --------- | ------------- | | Thonny | IDE gratuito e semplice, perfetto per imparare Python. Scaricabile su thonny.org. | | Libreria (o modulo) | Raccolta di funzioni già pronte che puoi importare nel tuo programma con import. | | random | Libreria standard di Python per generare valori casuali. | | int() | Funzione che converte un valore in numero intero. int("42") → 42. | | input() | Funzione che legge una riga di testo scritta dall'utente da tastiera. | | Indentazione | Il rientro di 4 spazi che indica a Python quali righe appartengono a un blocco (if, while, def). | | f-string | Stringa che inizia con f"..." e permette di inserire variabili tra {}. | | break | Istruzione che esce immediatamente dal ciclo while o for in cui si trova. | | Bug | Errore nel codice che causa un comportamento inatteso. Il termine nasce da una falena reale trovata dentro un computer nel 1947! |
Prossimo capitolo
Capitolo 2: Quiz Show — Diventa il re delle domande
Liste, dizionari, ciclofor,enumerate(),random.shuffle, file I/O, multiplayer a turni. Codice completo con 4 sfide: timer suspense, high score su file, domande da file esterno, modalità 2 giocatori.
Questo post è un estratto dal libro "Divento Programmatore: Python e i Giochi" (Volume 2 della collana "Cervello Elettronico") di Rocco Balzamà. Target: 10-14 anni · ~180 pagine · Thonny + VS Code.
Per approfondire
- Primi passi con Python: il tuo primo programma
- Variabili e tipi di dati in Python spiegati semplice
- Perché imparare a programmare in Python da ragazzi
- Corsi e percorsi di programmazione