Vai al contenuto
Leo

Esempi

Programmi pronti, in italiano. Copia, incolla, premi Esegui.

28 programmi completi, dalle basi del linguaggio all'automazione dei file, dal server web locale al videogioco. Ognuno è spiegato con chiarezza e colorato come in Leo Studio; quelli che scrivono qualcosa mostrano anche il risultato che otterrai. Sono tutti provati con Leo, uno per uno.

  1. Copia il codice con il pulsante in alto a destra.
  2. Incolla in Leo Studio (per i programmi a finestre, nel codice della finestra).
  3. Premi Esegui (F5) e cambialo come vuoi: è tuo.

Primi passi Facile Programma testuale

Il primo programma

Variabili, testo con valori calcolati e una decisione: il programma saluta, fa un calcolo sull'età e sceglie la risposta. Cambia i valori e guarda come cambia l'uscita.

programma.leo
# Il tuo primo programma: ricorda, calcola e decide.
variabile nome = "Giulia"
variabile anni = 14

stampa("Ciao, {nome}!")
stampa("Tra dieci anni avrai {anni + 10} anni.")

se anni >= 18 allora
    stampa("Sei maggiorenne.")
altrimenti
    stampa("Ti mancano {18 - anni} anni per diventare maggiorenne.")
fine
Ciao, Giulia!
Tra dieci anni avrai 24 anni.
Ti mancano 4 anni per diventare maggiorenne.
Primi passi Facile Programma testuale

La media dei voti

Una lista di voti, un ciclo che li somma e il risultato: media e voto migliore. Lo schema di base di ogni elaborazione di dati.

programma.leo
# Calcola la media e il voto migliore
variabile voti = [28, 30, 24, 27, 30]
variabile totale = 0

per ogni v in voti fai
    totale += v
fine

variabile media = totale / lunghezza(voti)
stampa("Media: {arrotonda(media, 2)}")
stampa("Voto migliore: {massimo(voti)}")
Media: 27.8
Voto migliore: 30
Primi passi Facile Programma testuale

Tabella di moltiplicazione

Un ciclo con l'intervallo di valori e il testo formattato: il programma costruisce la tabella di moltiplicazione di un numero, riga per riga.

programma.leo
# La tabellina che vuoi: cambia il numero e riesegui.
variabile numero = 7

per ogni per_quanto in 1..10 fai
    stampa("{numero} x {per_quanto} = {numero * per_quanto}")
fine
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
7 x 10 = 70
Finestre e pulsanti Facile Programma a finestre

La finestra che saluta

Il primo programma con una finestra: una casella di testo, un pulsante e l'evento clic che legge la casella e aggiorna l'etichetta.

Finestra1.leo
# Codice degli eventi di Finestra1

quando Finestra1.apertura fai
    Etichetta1.testo = "Benvenuto! Come ti chiami?"
fine

quando PulsanteSaluta.clic fai
    se vuota(CasellaNome.testo) allora
        messaggio("Scrivi prima il tuo nome")
    altrimenti
        Etichetta1.testo = "Ciao, {CasellaNome.testo}!"
    fine
fine

Nella finestra: un'Etichetta, una CasellaTesto (CasellaNome) e un Pulsante (PulsanteSaluta).

Finestre e pulsanti Medio Programma a finestre

Convertitore di temperature

Scrivi i gradi Celsius e premi Converti (o Invio): la finestra mostra i gradi Fahrenheit. Se il valore non è un numero, l'errore viene gestito e spiegato.

Finestra1.leo
# Da gradi Celsius a gradi Fahrenheit, con il pulsante o con il tasto Invio.

funzione converti()
    prova
        variabile celsius = decimale(CasellaGradi.testo.sostituisci(",", "."))
        variabile fahrenheit = celsius * 9 / 5 + 32
        EtichettaRisultato.testo = "{celsius} °C sono {fahrenheit:1} °F"
    cattura ErroreValore
        EtichettaRisultato.testo = "Scrivi un numero, per esempio 21,5"
    fine
fine

quando PulsanteConverti.clic fai
    converti()
fine

quando CasellaGradi.invio fai
    converti()
fine

Nella finestra: due Etichette, una CasellaTesto (CasellaGradi) e un Pulsante (PulsanteConverti).

Finestre e pulsanti Medio Programma a finestre

Lista della spesa

Un'app completa con un elenco: aggiungi elementi, rimuovi quelli selezionati e tieni il conteggio aggiornato. Lo schema di ogni gestione di liste.

Finestra1.leo
# Lista della spesa: aggiungi, togli e conta i prodotti.

funzione aggiorna_totale()
    variabile quanti = lunghezza(ElencoSpesa.elementi)
    se quanti == 1 allora
        EtichettaTotale.testo = "1 prodotto"
    altrimenti
        EtichettaTotale.testo = "{quanti} prodotti"
    fine
fine

funzione aggiungi_prodotto()
    variabile prodotto = CasellaProdotto.testo.pulisci()
    se vuota(prodotto) allora
        CasellaProdotto.scuoti()
        restituisci
    fine
    ElencoSpesa.aggiungi(prodotto)
    CasellaProdotto.testo = ""
    aggiorna_totale()
fine

quando PulsanteAggiungi.clic fai
    aggiungi_prodotto()
fine

quando CasellaProdotto.invio fai
    aggiungi_prodotto()
fine

quando PulsanteTogli.clic fai
    se ElencoSpesa.indice_selezionato >= 0 allora
        ElencoSpesa.rimuovi(ElencoSpesa.indice_selezionato)
        aggiorna_totale()
    altrimenti
        messaggio("Seleziona prima un prodotto dall'elenco.")
    fine
fine

Nella finestra: una CasellaTesto, due Pulsanti, un Elenco (ElencoSpesa) e un'Etichetta.

Giochi Facile Programma testuale

Indovina il numero

Numeri casuali, un ciclo con condizione d'uscita e input controllato: il programma sceglie un numero da 1 a 100 e guida i tentativi.

programma.leo
# Indovina il numero: il computer ne sceglie uno a caso tra 1 e 100.
variabile segreto = casuale(1, 100)
variabile tentativi = 0
variabile trovato = falso

mentre non trovato fai
    prova
        variabile n = intero(chiedi("Il tuo numero: "))
        tentativi += 1
        se n < segreto allora
            stampa("Più alto!")
        altrimenti se n > segreto allora
            stampa("Più basso!")
        altrimenti
            trovato = vero
        fine
    cattura ErroreValore
        stampa("Scrivi un numero intero.")
    fine
fine

stampa("Bravo! Hai indovinato in {tentativi} tentativi.")

Il numero segreto cambia a ogni partita: prova a indovinarlo con meno di 7 tentativi.

Giochi Medio Programma testuale

Sasso, carta, forbici

Scelte casuali, confronti e punteggio su tre manche: un piccolo motore di regole contro il computer.

programma.leo
# Sasso, carta, forbici: tre manche contro il computer.
variabile mosse = ["sasso", "carta", "forbici"]
variabile batte = {"sasso": "forbici", "carta": "sasso", "forbici": "carta"}
variabile tuoi_punti = 0
variabile suoi_punti = 0

ripeti 3 volte
    variabile mia = chiedi("Sasso, carta o forbici? ").minuscolo().pulisci()
    se non (mia in mosse) allora
        stampa("Non conosco \"{mia}\": gioco sasso per te.")
        mia = "sasso"
    fine
    variabile sua = scegli_a_caso(mosse)
    stampa("Il computer gioca {sua}.")
    se mia == sua allora
        stampa("Pareggio!")
    altrimenti se batte[mia] == sua allora
        stampa("Hai vinto la manche!")
        aumenta tuoi_punti
    altrimenti
        stampa("Vince il computer.")
        aumenta suoi_punti
    fine
fine

stampa("Risultato finale: tu {tuoi_punti}, computer {suoi_punti}")
Sasso, carta o forbici? sasso
Il computer gioca forbici.
Hai vinto la manche!
Sasso, carta o forbici? carta
Il computer gioca carta.
Pareggio!
Sasso, carta o forbici? forbici
Il computer gioca carta.
Hai vinto la manche!
Risultato finale: tu 2, computer 0

Un esempio di uscita: le mosse del computer cambiano a ogni partita.

Giochi Avanzato Programma a finestre

Raccogli le monete

Un videogioco con scena, sprite, tastiera e collisioni: muovi il personaggio con le frecce, raccogli le monete che compaiono in punti a caso e batti il record.

Finestra1.leo
# Raccogli le monete: frecce per muoversi, spazio per fermarsi.
variabile direzione_x = 0.0
variabile direzione_y = 0.0
costante VELOCITA = 180

funzione sposta_moneta()
    SpriteMoneta.sinistra = casuale(10, ScenaGioco.larghezza - 40)
    SpriteMoneta.alto = casuale(10, ScenaGioco.altezza - 40)
fine

quando Finestra1.apertura fai
    ScenaGioco.avvia()
    sposta_moneta()
fine

# 60 volte al secondo: evento["tempo"] sono i secondi dall'ultimo fotogramma
quando ScenaGioco.fotogramma fai
    variabile dt = evento["tempo"]
    SpriteGiocatore.sposta(direzione_x * VELOCITA * dt, direzione_y * VELOCITA * dt)
    se SpriteGiocatore.tocca("SpriteMoneta") allora
        PunteggioMonete.aggiungi(1)
        sposta_moneta()
    fine
fine

quando ScenaGioco.tasto fai
    scegli evento["tasto"]
        caso "Sinistra" allora
            direzione_x = -1.0
        caso "Destra" allora
            direzione_x = 1.0
        caso "Su" allora
            direzione_y = -1.0
        caso "Giù" allora
            direzione_y = 1.0
        caso "Spazio" allora
            direzione_x = 0.0
            direzione_y = 0.0
    fine
fine

quando PunteggioMonete.nuovo_record fai
    EtichettaStato.testo = "Nuovo record: {evento["valore"]} monete!"
fine

Nella finestra: una Scena con due Sprite (SpriteGiocatore e SpriteMoneta), un Punteggio e un'Etichetta. Le immagini degli sprite le scegli tu in Leo Studio.

Testo e dati Medio Programma testuale

Le parole più usate

Analisi di un testo: normalizza le parole, conta le occorrenze con un dizionario e ordina il risultato per mostrare le tre più frequenti.

programma.leo
# Conta le parole di un testo e mostra le tre più usate.
variabile testo_da_contare = "la vita è bella e la musica è bella e la vita è una sola"
variabile conteggio = {}

per ogni parola in testo_da_contare.dividi() fai
    conteggio[parola] = conteggio.prendi(parola, 0) + 1
fine

variabile classifica = ordina_per(conteggio.coppie(), funzione (c) restituisci c[1] fine, decrescente = vero)

stampa("Parole diverse: {lunghezza(conteggio)}")
per ogni posizione, coppia in enumera(classifica, 1) fai
    se posizione > 3 allora
        interrompi
    fine
    stampa("{posizione}. \"{coppia[0]}\" compare {coppia[1]} volte")
fine
Parole diverse: 8
1. "la" compare 3 volte
2. "è" compare 3 volte
3. "vita" compare 2 volte
Testo e dati Medio Programma testuale

Statistiche su un elenco di voti

Da un elenco di studenti e voti il programma ricava media, mediana, moda, promossi e rimandati, con le funzioni di statistica della libreria.

programma.leo
# Statistiche di una verifica: media, mediana, moda e promossi.
variabile classe = {"Ada": 8, "Bruno": 5, "Carla": 7, "Dario": 6, "Elena": 9, "Fabio": 7, "Gaia": 4}
variabile voti = classe.valori()

stampa("Media: {arrotonda(media(voti), 2)}")
stampa("Mediana: {mediana(voti)}")
stampa("Voto più frequente: {moda(voti)}")

variabile promossi = [nome per ogni nome, voto in classe se voto >= 6]
variabile rimandati = [nome per ogni nome, voto in classe se voto < 6]
stampa("Promossi ({lunghezza(promossi)}): " + ", ".unisci(promossi))
stampa("Da recuperare: " + ", ".unisci(rimandati))
Media: 6.57
Mediana: 7
Voto più frequente: 7
Promossi (5): Ada, Carla, Dario, Elena, Fabio
Da recuperare: Bruno, Gaia
Testo e dati Avanzato Programma testuale

Trova email e numeri in un testo

Espressioni regolari in italiano: da un testo lungo il programma estrae indirizzi email, date e numeri, e controlla il formato di un codice.

programma.leo
# Modelli di testo: trovare email, date e numeri senza scrivere regole complicate.
variabile messaggio = """
    Ciao! Il corso inizia il 12/10/2026 alle 18:30.
    Iscrizioni a segreteria@scuola.it oppure a info@leo-corsi.it.
    Posti disponibili: 24, costo 35 euro.
    """

stampa("Email:", trova_tutti(messaggio, "<email>"))
stampa("Data:", trova_primo(messaggio, "<data>"))
stampa("Ora:", trova_primo(messaggio, "<ora>"))
stampa("Numeri:", trova_tutti(messaggio, "<cifre>"))

per ogni codice in ["AB123", "12ABC"] fai
    se corrisponde(codice, "[A-Z][A-Z]<cifre>") allora
        stampa("{codice}: scritto bene")
    altrimenti
        stampa("{codice}: servono due lettere maiuscole e poi delle cifre")
    fine
fine
Email: ["segreteria@scuola.it", "info@leo-corsi.it"]
Data: 12/10/2026
Ora: 18:30
Numeri: ["12", "10", "2026", "18", "30", "24", "35"]
AB123: scritto bene
12ABC: servono due lettere maiuscole e poi delle cifre
File Facile Programma testuale

Note salvate su file

Scrive in un file, aggiunge in fondo e rilegge tutto: i dati restano anche quando il programma si chiude. La base della persistenza.

programma.leo
# Un diario in un file di testo: scrivere, aggiungere, rileggere.
variabile diario = unisci_percorso(cartella_temporanea(), "diario.txt")

scrivi_file(diario, "Lunedì: ho scritto il mio primo programma.\n")
aggiungi_a_file(diario, "Martedì: ho imparato i cicli.")
aggiungi_a_file(diario, "Mercoledì: ho salvato questo diario.")

variabile righe = leggi_righe(diario)
stampa("Il diario ha {lunghezza(righe)} pagine:")
per ogni numero, riga in enumera(righe, 1) fai
    stampa("  {numero}. {riga}")
fine
Il diario ha 3 pagine:
  1. Lunedì: ho scritto il mio primo programma.
  2. Martedì: ho imparato i cicli.
  3. Mercoledì: ho salvato questo diario.
File Medio Programma testuale

Tabella CSV per Excel

Salva una tabella in un file CSV che Excel apre con le colonne giuste, poi la rilegge e calcola la media. Utile per l'ufficio e per i dati di lavoro.

programma.leo
# Una tabella CSV che Excel apre con le colonne giuste.
variabile tabella = unisci_percorso(cartella_temporanea(), "voti.csv")

variabile classe = [
    {"nome": "Ada", "materia": "Matematica", "voto": 9.5},
    {"nome": "Bruno", "materia": "Matematica", "voto": 7},
    {"nome": "Carla", "materia": "Storia", "voto": 8}
]

scrivi_tabella(tabella, classe, excel = vero)
aggiungi_a_tabella(tabella, {"nome": "Dario", "materia": "Storia", "voto": 6.5})

stampa("Righe nel file:")
per ogni riga in leggi_righe(tabella) fai
    stampa("  " + riga)
fine

variabile voti = leggi_tabella(tabella)
variabile totale = somma([studente["voto"] per ogni studente in voti])
stampa("Studenti: {lunghezza(voti)}, media: {arrotonda(totale / lunghezza(voti), 2)}")
Righe nel file:
  nome;materia;voto
  Ada;Matematica;9,5
  Bruno;Matematica;7
  Carla;Storia;8
  Dario;Storia;6,5
Studenti: 4, media: 7.75
File Avanzato Programma testuale

Riordina una cartella

Automazione dei file: crea una copia di sicurezza compressa, poi sposta ogni file nella cartella del suo tipo (foto, testi, tabelle).

programma.leo
# Riordina una cartella: ogni file nella sottocartella della sua estensione.
variabile lavoro = cartella_temporanea()
variabile scrivania = unisci_percorso(lavoro, "scrivania")
crea_cartella(scrivania)

# alcuni file di prova
per ogni nome in ["tema.txt", "appunti.txt", "gita.jpg", "mare.jpg", "voti.csv"] fai
    scrivi_file(unisci_percorso(scrivania, nome), "contenuto di " + nome)
fine
stampa("Prima:", elenca_file(scrivania))

# 1. copia di sicurezza compressa
variabile zip = unisci_percorso(lavoro, "sicurezza.zip")
stampa("File nello ZIP:", comprimi_zip(scrivania, zip))

# 2. ogni file nella cartella della sua estensione
per ogni nome in elenca_file(scrivania) fai
    variabile destinazione = unisci_percorso(scrivania, estensione_file(nome))
    crea_cartella(destinazione)
    sposta_file(unisci_percorso(scrivania, nome), destinazione)
fine

stampa("Dopo:", elenca_cartelle(scrivania))
per ogni cartella in elenca_cartelle(scrivania) fai
    stampa("  {cartella}: {elenca_file(unisci_percorso(scrivania, cartella))}")
fine
Prima: ["appunti.txt", "gita.jpg", "mare.jpg", "tema.txt", "voti.csv"]
File nello ZIP: 5
Dopo: ["csv", "jpg", "txt"]
  csv: ["voti.csv"]
  jpg: ["gita.jpg", "mare.jpg"]
  txt: ["appunti.txt", "tema.txt"]

Per sicurezza l'esempio lavora in una cartella temporanea creata apposta: per usarlo davvero cambia la cartella di partenza.

Internet Medio Programma testuale

Costruire indirizzi web

Codifica e decodifica degli indirizzi web: accenti, spazi e simboli trasformati nel formato corretto per gli URL, e ritorno.

programma.leo
# Indirizzi web con accenti e spazi, scritti nel modo giusto.
variabile ricerca = componi_url("https://www.esempio.it/cerca", {"q": "caffè e cornetto", "pagina": 2})
stampa("Indirizzo pronto:", ricerca)

stampa("Solo i parametri:", codifica_url({"città": "Forlì", "ordina": "prezzo"}))
stampa("E al contrario:", decodifica_url("caff%C3%A8%20e%20cornetto"))
Indirizzo pronto: https://www.esempio.it/cerca?q=caff%C3%A8+e+cornetto&pagina=2
Solo i parametri: citt%C3%A0=Forl%C3%AC&ordina=prezzo
E al contrario: caffè e cornetto
Internet Avanzato Programma testuale

Un server web locale

In poche righe avvii un server web, poi il programma lo interroga come farebbe un browser e legge i dati in JSON. Tutto resta sul tuo computer.

programma.leo
# Un piccolo sito su questo computer e le richieste web per leggerlo.
variabile sito = server_web(0, pagina = "<!doctype html><h1>Benvenuto nel sito di Leo</h1>", pagine = {
    "/orari": {"apertura": "9:00", "chiusura": "18:30", "giorni": ["lun", "mar", "mer", "gio", "ven"]},
    "/saluto": "Ciao dal server!"
})
sito.avvia()

stampa(scarica_pagina(sito.indirizzo + "saluto"))

variabile orari = scarica_json(sito.indirizzo + "orari")
stampa("Aperto dalle {orari["apertura"]} alle {orari["chiusura"]}, {lunghezza(orari["giorni"])} giorni")

# una pagina che non esiste non ferma il programma
variabile risposta = richiesta_web(sito.indirizzo + "prezzi")
se non risposta["riuscita"] allora
    stampa(risposta["spiegazione"])
fine

sito.ferma()
stampa("Sito spento.")
Ciao dal server!
Aperto dalle 9:00 alle 18:30, 5 giorni
Pagina non trovata (404): la pagina non esiste: controlla l'indirizzo
Sito spento.

Il server ascolta solo su questo computer (127.0.0.1): nessun dato esce su Internet.

Windows Facile Programma testuale

Informazioni sul sistema

Il programma interroga Windows: utente, nome del computer, memoria, stato della batteria. Utile per inventari e diagnosi.

programma.leo
# Chiedi a Windows qualche informazione sul tuo computer.
stampa("Computer:", nome_computer(), "- utente:", nome_utente())
stampa("Processore:", architettura(), "con", numero_core(), "core")
stampa("Acceso da", tempo_accensione_testo())

prova
    stampa("Sistema:", versione_windows())
    variabile m = info_memoria()
    stampa("Memoria: {dimensione_leggibile(m["usata"])} usati su {dimensione_leggibile(m["totale"])}")
    variabile b = info_batteria()
    se b["presente"] allora
        stampa("Batteria al {b["percentuale"]}%")
    altrimenti
        stampa("Nessuna batteria: è un computer fisso")
    fine
cattura ErroreValore come e
    stampa("Nota:", e.messaggio)
fine

Ogni computer risponde in modo diverso. Le funzioni di Windows funzionano su Windows 10 e 11; su altri sistemi danno un messaggio chiaro, che il programma mostra.

Windows Medio Programma testuale

Assistente per il desktop

Elenca le finestre aperte, legge il tema di Windows, cattura lo schermo e invia una notifica al termine.

programma.leo
# Un assistente per il desktop: finestre aperte, cattura dello schermo e notifica.
prova
    stampa("Tema di Windows:", tema_windows())
    stampa("Finestre aperte:")
    per ogni f in elenca_finestre() fai
        stampa("  {f["titolo"]} ({f["programma"]})")
    fine

    variabile foto = cattura_schermo("desktop.png", 1)
    stampa("Cattura dello schermo salvata in", foto)
    mostra_notifica("Fatto!", "La cattura è in " + foto)
cattura ErroreValore come e
    stampa("Non ci sono riuscito:", e.messaggio)
fine

Dipende dalle finestre che hai aperto. Funziona su Windows 10 e 11. Non preme tasti e non muove il mouse: usa solo le richieste normali di Windows.

Grafici e suoni Facile Programma testuale

Un grafico in tre righe

Dati, tipo di grafico e un file: Leo disegna barre, linee o torta e le salva in un file che si apre con il browser.

programma.leo
# Dai numeri a un grafico: barre e torta, salvati in SVG.
variabile vendite = {"Gen": 120, "Feb": 150, "Mar": 90, "Apr": 210, "Mag": 180, "Giu": 240}

variabile barre = grafico("barre", titolo = "Vendite del primo semestre")
barre.aggiungi_serie("Quest'anno", vendite)
barre.mostra_valori = vero
stampa("Salvato: " + barre.salva("vendite.svg"))

variabile quote = {"Negozio": 55, "Sito": 30, "Telefono": 15}
variabile torta = grafico_anello(quote, "Da dove arrivano gli ordini")
torta.colori = ["oro", "rosso", "grigio"]
stampa("Salvato: " + salva_grafico(torta, "ordini.svg"))
Salvato: vendite.svg
Salvato: ordini.svg
Grafici e suoni Facile Programma testuale

Grafica della tartaruga: una stella

Grafica vettoriale con la tartaruga: cinque tratti e cinque rotazioni di 144 gradi disegnano una stella. Il modo più immediato per vedere cicli e geometria al lavoro.

programma.leo
# La stella a cinque punte: 5 punte, girando ogni volta di 144 gradi.
sfondo("blu notte")
velocità(6)
spessore(3)
colore("oro")
riempi("giallo")
ripeti 5 volte
    avanti(200)
    destra(144)
fine
fine_riempi()

penna_su()
vai_a(40, -60)
colore("bianco")
scrivi_qui("Che stella!", 20)
nascondi_tartaruga()
salva_disegno("stella.svg")
Disegno salvato in "stella.svg" (si apre con il browser).

Il disegno compare in una finestra; se le finestre non sono disponibili viene salvato in un file SVG.

Grafici e suoni Medio Programma testuale

Suona una melodia

Sintesi del suono: le note si scrivono con il loro nome (do, re, mi), il programma compone una melodia, aggiunge un accordo e salva il brano in un file audio.

programma.leo
# Note, melodie e accordi: 4 = un battito, 2 = due battiti.
stampa("Il la centrale vibra {frequenza_nota("la")} volte al secondo.")

variabile fra_martino = melodia("do4 re4 mi4 do4 do4 re4 mi4 do4 mi4 fa4 sol2 mi4 fa4 sol2", tempo = 140)
stampa("Fra Martino dura {fra_martino.durata} secondi.")

variabile finale = accordo("do maggiore", battiti = 4, forma = "triangolo").dissolvenza(uscita = 1.5)
variabile brano = fra_martino.poi(silenzio(0.3)).poi(finale)
stampa("Salvato: " + salva_suono(brano, "fra_martino.wav"))

# suona(brano, aspetta = vero)
Il la centrale vibra 440.0 volte al secondo.
Fra Martino dura 6.857 secondi.
Salvato: fra_martino.wav

Per ascoltarlo subito togli il # davanti all'ultima riga.

Animazioni Medio Programma a finestre

Il pulsante che salta

Animazioni con la curva «rimbalzo»: il pulsante sale e ricade rimbalzando, mentre l'etichetta conta i salti. Le animazioni si scrivono come una frase.

Finestra1.leo
# Il pulsante sale in fretta e ricade rimbalzando.
variabile salti = 0

funzione ricadi()
    anima PulsanteSalta.alto a 150 in 0.6 secondi con curva "rimbalzo"
fine

quando PulsanteSalta.clic fai
    aumenta salti
    EtichettaSalti.testo = "Salti: {salti}"
    anima(PulsanteSalta, "alto", 60, 0.25, "veloce", poi = ricadi)
    se salti % 5 == 0 allora
        EtichettaSalti.lampeggia(3)
    fine
fine

Nella finestra: un Pulsante (PulsanteSalta) e un'Etichetta (EtichettaSalti).

Animazioni Avanzato Programma a finestre

La finestra che cambia forma

Finestre non rettangolari: a ogni clic la finestra cambia forma, da triangolo a esagono, stella e infine cerchio.

Finestra1.leo
# Da triangolo a ottagono, poi una stella e infine un cerchio.
quando PulsanteTrasforma.clic fai
    per ogni lati in 3..8 fai
        Finestra1.forma = forma_poligono(lati)
        attendi(0.3)
    fine
    Finestra1.forma = forma_stella(5)
    attendi(0.6)
    Finestra1.forma = "cerchio"
    PulsanteTrasforma.pulsa()
fine

Nella finestra: un solo Pulsante (PulsanteTrasforma). Alt+F4 chiude la finestra qualunque forma abbia.

Temporizzatori Facile Programma testuale

Conto alla rovescia

Temporizzatori ed eventi a tempo: il programma conta i secondi e allo scadere esegue un'azione. Si scrive come lo diresti: ogni secondo fai, dopo tre secondi fai.

programma.leo
# Temporizzatori: `ogni` ripete, `dopo` aspetta una volta sola.
variabile secondi = 0

inizio
    stampa("Pronti...")
    ogni 1 secondo fai
        secondi += 1
        stampa("{secondi}...")
    fine
    dopo 3.5 secondi fai
        ferma_temporizzatori()
        stampa("Via! Sono passati {secondi} secondi.")
    fine
fine
Pronti...
1...
2...
3...
Via! Sono passati 3 secondi.
Temporizzatori Facile Programma a finestre

Orologio digitale

Un orologio che si aggiorna ogni secondo con un Timer e mostra anche la data di oggi, scritta in italiano.

Finestra1.leo
# Un orologio che si aggiorna da solo ogni secondo.
funzione aggiorna()
    EtichettaOra.testo = ora()
    EtichettaData.testo = adesso().in_lettere()
fine

quando Finestra1.apertura fai
    aggiorna()
fine

quando Timer1.scatto fai
    aggiorna()
fine

Nella finestra: due Etichette e un Timer (Timer1) con intervallo di 1000 millisecondi.

Test e verifiche Facile Programma testuale

Gestione degli errori

Un programma robusto non si blocca davanti a un errore: lo cattura con prova e cattura, lo spiega e prosegue. Qui una divisione per zero e una conversione non valida.

programma.leo
# prova ... cattura: il programma gestisce gli errori e continua.
funzione dividi(a, b)
    prova
        restituisci a / b
    cattura ErroreDivisione
        stampa("Non si può dividere {a} per zero.")
        restituisci nulla
    fine
fine

stampa(dividi(10, 4))
stampa(dividi(10, 0))

per ogni risposta in ["42", "quarantadue"] fai
    prova
        stampa("Hai scritto il numero", intero(risposta))
    cattura ErroreValore come e
        stampa("\"{risposta}\" non è un numero:", e.messaggio)
    infine
        stampa("(controllo finito)")
    fine
fine
2.5
Non si può dividere 10 per zero.
nulla
Hai scritto il numero 42
(controllo finito)
"quarantadue" non è un numero: Non posso trasformare il testo "quarantadue" in un intero.
(controllo finito)
Test e verifiche Medio Verifiche

Verifiche automatiche

Test automatici in italiano: verifica, aspettati. Il comando leo verifica li esegue tutti e riporta quelli che falliscono.

verifiche.leo
# Verifiche incorporate: si eseguono con `leo verifica verifiche.leo`.

funzione doppio(n)
    restituisci n * 2
fine

funzione media_voti(voti)
    se vuota(voti) allora
        lancia ErroreValore("Servono dei voti per fare la media")
    fine
    restituisci somma(voti) / lunghezza(voti)
fine

verifica "doppio di un numero" fai
    aspettati doppio(21) == 42
    aspettati doppio(0) == 0
fine

verifica "media dei voti" fai
    aspettati media_voti([6, 8, 10]) == 8
fine

verifica "media senza voti" fai
    aspettati errore ErroreValore fai
        media_voti([])
    fine
fine

inizio
    stampa("Il doppio di 21 è {doppio(21)}")
fine
$ leo verifica verifiche.leo
verifiche.leo
  ok  doppio di un numero
  ok  media dei voti
  ok  media senza voti

3 verifiche: 3 riuscite.

Si esegue con: leo verifica verifiche.leo (con leo verifiche.leo parte solo il programma).