Vai al contenuto
Leo

04 Sezione 4 di 15

Le basi del linguaggio

Tutto quello che serve per scrivere programmi veri: come si conservano i valori, come si prendono decisioni, come si ripete un lavoro e come lo si mette in una funzione. Ogni esempio si può copiare ed eseguire così com'è.

  • 10 minuti di lettura
  • Livello: base
  • 26 esempi verificati

La forma del codice#

Un programma Leo è un file di testo con estensione .leo. Poche regole valgono sempre:

  • un'istruzione per riga (per metterne due sulla stessa riga separale con ;);
  • i blocchi si aprono con allora o fai e si chiudono sempre con fine;
  • i commenti vanno da # a fine riga, o tra #[ e ]# su più righe: Leo li ignora, servono a chi legge;
  • le parole chiave si scrivono in minuscolo; i nomi possono avere lettere accentate (età, città).
Leoeseguito con Leo
# Questo è un commento: Leo lo salta#[ anche questo,   su più righe ]#stampa("Una riga")stampa("Due"); stampa("righe")
Uscita
Una riga
Due
righe

Variabili#

Una variabile è una scatola con un nome che contiene un valore. La prima volta si dichiara con variabile; poi si cambia con =.

Leoeseguito con Leo
variabile punti = 0punti = 10punti += 5          # ora vale 15; esistono anche -=, *=, /=stampa(punti)
Uscita
15

Usare un nome mai dichiarato è un errore: così un errore di battitura (pnuti = 3) non crea di nascosto una variabile nuova, e Leo ti propone il nome giusto.

Si possono dichiarare più variabili insieme, e scambiare due valori in una riga:

Leoeseguito con Leo
variabile nome, anni = ["Beatrice", 24]variabile a, b = 1, 2a, b = b, astampa(nome, anni, a, b)
Uscita
Beatrice 24 2 1

Dove si vede una variabile. Una variabile dichiarata dentro un blocco (un se, un ciclo, una funzione) esiste solo lì dentro. Per cambiare una variabile di fuori basta =:

Leoeseguito con Leo
variabile totale = 0per ogni n in [1, 2, 3] fai    variabile doppio = n * 2     # esiste solo dentro il ciclo    totale += doppio             # cambia la variabile esternafinestampa(totale)
Uscita
12

Costanti#

Una costante è un valore che non cambia mai. Si scrive di solito in maiuscolo. Provare a cambiarla è un errore.

Leoeseguito con Leo
costante IVA = 22variabile prezzo = 50stampa("Con IVA: {prezzo + prezzo * IVA / 100} euro")stampa(PI_GRECO)            # una costante già pronta
Uscita
Con IVA: 61.0 euro
3.141592653589793

Aumenta e diminuisci#

Per cambiare un numero puoi anche usare le parole: aumenta e diminuisci. Dopo di scrivi di quanto; senza di vuol dire di 1.

Leoeseguito con Leo
variabile punti = 0variabile vite = 3variabile voti = [6, 7]aumenta punti di 10      # come punti += 10diminuisci vite          # come vite -= 1aumenta voti[0] di 2     # anche gli elementi di una listastampa(punti, vite, voti)
Uscita
10 2 [8, 7]

Funziona anche con le proprietà dei controlli: aumenta Pulsante1.alto di 5.

I tipi di valore#

TipoEsempiNote
intero42, -7, 1_000_000senza limiti di grandezza; _ separa le cifre
decimale3.14, 2.0e-3con il punto, mai la virgola
testo"ciao"tra virgolette doppie
logicovero, falsoil risultato di un confronto
nullanulla«nessun valore»
lista[1, 2, 3]elementi in ordine, dall'indice 0
dizionario{"nome": "Ada"}coppie chiave → valore

tipo(x) dice il tipo di un valore. Leo non converte mai da solo: "3" + 4 è un errore. Le conversioni si fanno a mano:

Leoeseguito con Leo
stampa(tipo(3.5))stampa(intero("42") + 1)stampa(decimale(3))stampa("Hai " + testo(18) + " anni")
Uscita
decimale
43
3.0
Hai 18 anni

Numeri e operazioni#

Leoeseguito con Leo
stampa(7 + 2, 7 - 2, 7 * 2)stampa(7 / 2)       # diviso: sempre un decimalestampa(7 // 2)      # divisione interastampa(7 % 3)       # restostampa(2 ^ 10)      # potenzastampa(arrotonda(3.14159, 2), assoluto(-5), radice(16))stampa(minimo(4, 9, 2), massimo([3, 9, 4]), somma([1, 2, 3]))
Uscita
9 5 14
3.5
3
1
1024
3.14 5 4.0
2 9 6

Per un numero a caso tra due valori, estremi compresi, c'è casuale(1, 6): il dado.

Confronti e logica#

I confronti danno vero o falso: == (uguale), != (diverso), <, <=, >, >=. Si combinano con e, o, non.

Leoeseguito con Leo
variabile x = 7stampa(x == 7, x != 7)stampa(0 < x < 10)              # i confronti si possono concatenarestampa(x > 0 e x < 5)stampa(non (x > 5))stampa("a" in "casa", 3 in [1, 2, 3])
Uscita
vero falso
vero
falso
falso
vero vero

Testi#

I testi stanno tra virgolette doppie. Tra graffe {…}, dentro un testo, puoi mettere qualunque valore o calcolo: Leo lo sostituisce.

Leoeseguito con Leo
variabile nome = "Beatrice"stampa("Ciao, {nome}! Il tuo nome ha {lunghezza(nome)} lettere.")stampa("Prima riga\nSeconda riga\tcon una tabulazione")stampa("Le graffe vere: \{ e \}")
Uscita
Ciao, Beatrice! Il tuo nome ha 8 lettere.
Prima riga
Seconda riga	con una tabulazione
Le graffe vere: { e }

Numeri formattati: dopo il valore, due punti e il formato.

Leoeseguito con Leo
variabile prezzo = 3.5variabile abitanti = 1234567variabile totale = 1234.5stampa("Prezzo: {prezzo:2} euro")stampa("Abitanti: {abitanti:migliaia}")stampa("Totale: {totale:migliaia 2} euro")
Uscita
Prezzo: 3.50 euro
Abitanti: 1.234.567
Totale: 1.234,50 euro

Metodi dei testi: si chiamano con il punto e danno un testo nuovo (quello di partenza non cambia).

Leoeseguito con Leo
variabile frase = "  Leo parla italiano  "stampa(frase.pulisci())stampa(frase.maiuscolo())stampa(frase.pulisci().dividi(" "))stampa(", ".unisci(["pane", "latte", "uova"]))stampa("mela".sostituisci("m", "b"), "casa".inizia_con("ca"))stampa("Leo"[0], "Leo"[-1])
Uscita
Leo parla italiano
  LEO PARLA ITALIANO  
["Leo", "parla", "italiano"]
pane, latte, uova
bela vero
L o

Un testo su più righe si scrive tra tre virgolette """:

Leoeseguito con Leo
variabile nome = "Ada"variabile lettera = """    Cara {nome},      grazie della visita.    """stampa(lettera)
Uscita
Cara Ada,
  grazie della visita.

Liste#

Una lista è una fila di valori tra parentesi quadre. Il primo elemento ha indice 0; con un indice negativo si conta dal fondo.

Leoeseguito con Leo
variabile voti = [28, 30, 24]stampa(voti[0])          # il primostampa(voti[-1])         # l'ultimovoti[1] = 29voti.aggiungi(27)stampa(voti, lunghezza(voti))stampa(27 in voti)voti.ordina()stampa(voti)
Uscita
28
24
[28, 29, 24, 27] 4
vero
[24, 27, 28, 29]

Altri metodi utili: inserisci(indice, x), rimuovi(x), estrai(), inverti(), trova(x), conta(x). Per sapere se una lista è vuota: vuota(lista).

Una lista si può anche costruire in una riga, dicendo come calcolare ogni elemento:

Leoeseguito con Leo
variabile quadrati = [n * n per ogni n in 1..6]variabile pari = [n per ogni n in 1..10 se n % 2 == 0]stampa(quadrati)stampa(pari)
Uscita
[1, 4, 9, 16, 25, 36]
[2, 4, 6, 8, 10]

Dizionari#

Un dizionario associa a ogni chiave un valore, come una rubrica.

Leoeseguito con Leo
variabile persona = {"nome": "Ada", "età": 36}stampa(persona["nome"])persona["città"] = "Londra"            # aggiunge una chiavestampa(persona.prendi("email", "-"))   # "-" se la chiave mancastampa(persona.ha("età"))per ogni chiave, valore in persona fai    stampa("{chiave}: {valore}")fine
Uscita
Ada
-
vero
nome: Ada
età: 36
città: Londra

Chiedere una chiave che non c'è con le parentesi quadre dà un errore (ErroreChiave): quando non sei sicuro usa .prendi(chiave, predefinito) o controlla prima con .ha(chiave). Altri metodi: chiavi(), valori(), coppie(), rimuovi(chiave).

Decidere: se, altrimenti#

Leoeseguito con Leo
variabile voto = 16se voto >= 18 allora    stampa("Promosso")altrimenti se voto >= 15 allora    stampa("Orale di recupero")altrimenti    stampa("Respinto")fine
Uscita
Orale di recupero

Un solo fine chiude tutta la catena; altrimenti se e altrimenti sono facoltativi. Dopo se ci vuole un valore vero o falso: per sapere se una lista è vuota si scrive se vuota(lista) allora.

Tanti casi: scegli#

Quando un valore va confrontato con molte possibilità, scegli è più leggibile:

Leoeseguito con Leo
variabile voto = 7scegli voto    caso 10 allora        stampa("eccellente")    caso 8, 9 allora        stampa("molto bene")    caso 6..7 allora        stampa("sufficiente")    altrimenti        stampa("da ripassare")fine
Uscita
sufficiente

Un caso può avere più valori separati da virgole, un intervallo 6..7 (estremi compresi) o una lista. Vince il primo che corrisponde.

Ripetere: i cicli#

Un numero fisso di volte: ripeti#

Leoeseguito con Leo
ripeti 3 volte    stampa("Ciao!")fine
Uscita
Ciao!
Ciao!
Ciao!

Su ogni elemento: per ogni#

Funziona con le liste, i testi (lettera per lettera), gli intervalli e i dizionari.

Leoeseguito con Leo
per ogni frutto in ["mela", "pera", "fico"] fai    stampa("Mi piace: {frutto}")fineper ogni i in 1..5 fai    stampa(i * i)fineper ogni i in 3..1 fai        # all'indietro    stampa(i)fine
Uscita
Mi piace: mela
Mi piace: pera
Mi piace: fico
1
4
9
16
25
3
2
1

Finché una condizione è vera: mentre#

Leoeseguito con Leo
variabile n = 3mentre n > 0 fai    stampa(n)    n -= 1finestampa("Via!")
Uscita
3
2
1
Via!

Uscire o saltare un giro#

interrompi esce subito dal ciclo; continua salta al giro successivo.

Leoeseguito con Leo
per ogni i in 1..100 fai    se i % 2 == 0 allora        continua          # salta i pari    fine    se i > 9 allora        interrompi        # basta così    fine    stampa(i)fine
Uscita
1
3
5
7
9

Funzioni#

Una funzione dà un nome a un pezzo di codice, così lo puoi usare tante volte. Riceve dei valori (i parametri) e con restituisci dà un risultato.

Leoeseguito con Leo
funzione saluta(nome, saluto = "Ciao")    restituisci "{saluto}, {nome}!"fine stampa(saluta("Giulia"))stampa(saluta("Marco", saluto = "Buongiorno"))
Uscita
Ciao, Giulia!
Buongiorno, Marco!
  • un parametro con = ha un valore predefinito: si può non passarlo;
  • alla chiamata un parametro si può indicare per nome (saluto = "Buongiorno");
  • senza restituisci la funzione dà nulla;
  • una funzione va definita prima di essere chiamata (oppure si usa il blocco inizio, qui sotto).

Una funzione può anche chiamare se stessa (ricorsione):

Leoeseguito con Leo
funzione fattoriale(n)    se n <= 1 allora        restituisci 1    fine    restituisci n * fattoriale(n - 1)finestampa(fattoriale(10))
Uscita
3628800

Il programma principale: inizio … fine#

Il codice che deve partire subito si può racchiudere tra inizio e fine. Funzioni, costanti e gestori quando stanno fuori, prima o dopo. Il blocco parte dopo che tutto il resto del file è pronto, quindi le funzioni scritte sotto si possono già usare.

media.leoeseguito con Leo
costante SUFFICIENZA = 6 inizio    variabile voti = [7, 5, 8, 6]    stampa("Media: {media_di(voti):2}")    stampa(giudizio(media_di(voti)))fine funzione media_di(lista)    restituisci somma(lista) / lunghezza(lista)fine funzione giudizio(m)    se m >= SUFFICIENZA allora        restituisci "promosso"    fine    restituisci "da recuperare"fine
Uscita
Media: 6.50
promosso

Le regole: inizio va scritto da solo sulla sua riga, e c'è un solo blocco inizio per file. Quando c'è, fuori dal blocco restano solo funzioni, gestori quando, variabili, costanti e importa. Nell'editor di Leo Studio inizio + Tab scrive lo schema.

Tutto insieme#

Un piccolo programma che usa quasi tutto quello che hai visto: calcola la media di una classe, trova il voto migliore e dice chi è sopra la media.

classe.leoeseguito con Leo
inizio    variabile classe = {"Ada": 8, "Bruno": 6, "Carla": 9, "Dario": 5}    variabile m = somma(classe.valori()) / lunghezza(classe)    stampa("Media della classe: {m:2}")    stampa("Voto migliore: {massimo(classe.valori())}")    per ogni nome, voto in classe fai        se voto > m allora            stampa("- {nome} è sopra la media")        fine    finefine
Uscita
Media della classe: 7.00
Voto migliore: 9
- Ada è sopra la media
- Carla è sopra la media