Lezioni del modulo (4/4)
Stampa e f-string
Per comunicare qualcosa all'utente (o vedere cosa sta succedendo dentro il
nostro programma) usiamo la funzione predefinita print(...). Per comporre
testo a partire da più valori, la sintassi moderna e preferita sono le
f-string.
print(...)
print("Ciao, mondo!") # Ciao, mondo!
print("a", "b", "c") # a b c (separati da spazio)
print(2 + 2) # 4
print("riga 1", "riga 2") # riga 1 riga 2print può ricevere quanti argomenti vuoi: li unisce con uno spazio (per
default) e aggiunge un newline alla fine. Puoi cambiare entrambi con i
parametri sep e end:
print("a", "b", "c", sep="-") # a-b-c
print("senza newline", end="") # niente \n dopof-string: interpolazione moderna
Una f-string è una stringa prefissata da f: dentro le graffe {...}
puoi inserire qualunque espressione Python, che verrà valutata e inserita nel
risultato:
nome = "Ada"
anni = 30
print(f"Mi chiamo {nome} e ho {anni} anni.")
# Mi chiamo Ada e ho 30 anni.Dentro le graffe puoi mettere chiamate, operazioni, accessi a oggetti — è codice Python a tutti gli effetti:
prezzo = 12.5
quantita = 3
print(f"Totale: {prezzo * quantita:.2f} €")
# Totale: 37.50 €Il :.2f dopo i due punti è una format spec: in questo caso "due cifre
decimali, fixed-point". Le format spec più utili:
:.Nf— N cifre decimali (f"{pi:.4f}"→3.1416).:N/:>N/:<N/:^N— larghezza N, allineamento destra/sinistra/centro.:_o:,— separatore di migliaia (f"{1000000:,}"→1,000,000).
Sintassi alternative (per riferimento)
Prima delle f-string (introdotte in Python 3.6) si usavano due forme che incontrerai ancora in codice più vecchio:
# stile .format() — verboso ma esplicito
"{} ha {} anni".format("Ada", 30)
# stile %-formatting — molto vecchio
"%s ha %d anni" % ("Ada", 30)Per codice nuovo, usa sempre le f-string: più corte, più leggibili, più veloci.
Formattazione avanzata con f-string
Le f-string supportano specifiche di formattazione molto ricche all'interno delle parentesi graffe. Ad esempio, per formattare un numero decimale a due cifre dopo la virgola puoi scrivere:
prezzo = 19.99
print(f"Prezzo: {prezzo:.2f} €")La notazione :.2f indica che vogliamo rappresentare il numero float con esattamente 2 cifre decimali.
Prova tu
Dati `name = 'Ada'` e `age = 30`, costruisci con una f-string la stringa 'Ada ha 30 anni' e assegnala a `line`. Valuta `line`.
Mostra suggerimento
Sintassi: f"qualcosa {variabile} qualcos'altro"
Soluzione disponibile dopo 3 tentativi
Esercizio di ripasso
Stampa con print() la stringa 'pi greco vale 3.14' partendo da `pi = 3.14159`, usando una f-string con format spec a 2 decimali.
Mostra suggerimento
La format spec va dopo i due punti dentro le graffe: {pi:.2f}.
Soluzione disponibile dopo 3 tentativi
Sfida aggiuntiva
Data una variabile `price` pari a `19.99`, usa una f-string per comporre la stringa `'Prezzo: 19.99 €'` e salvala in `receipt_line`. Valuta infine la variabile.
Mostra suggerimento
Usa f"Prezzo: {price} €" e assegna il risultato a receipt_line.
Soluzione disponibile dopo 3 tentativi