lettura facile

L'operatore % in Python

L'operatore % in Python è usato per formattare le stringhe. E' simile alla formattazione delle stringhe nel linguaggio di programmazione C.

Ecco un esempio pratico.

Assegna un valore alfanumerico alla variabile "name".

name = "Alice"

Poi utilizza questa sintassi per stampare una stringa.

print("Hello, %s!" % name)

Il simbolo %s all'interno della stringa è un segnaposto che indica la posizione dove vuoi inserire il valore.

Dopo la stringa utilizza l'operatore % seguito dal valore o dal nome di una variabile.

In questo caso Python sostituisce il segnaposto %s di tipo stringa con il valore della variabile "name".

Hello, Alice!

Le stringhe sono oggetti immutabili. Quindi, la formattazione non modifica la stringa di origine ma ne restituisce una nuova.

La formattazione dei segnaposto (o tipo)

Ci sono diversi segnaposto che puoi usare con l'operatore %:

  • %c per un carattere singolo
  • %s per le stringhe. Converte ogni oggetto con la funzione str().
  • %r per le stringhe. Converte ogni oggetto con la funzione repr().
  • %a per le stringhe. Converte ogni oggetto con la funzione ascii().
  • %d per i numeri interi
  • %f o %F per i numeri in virgola mobile
  • %e per i numeri in virgola mobile in formato esponenziale (simbolo "e" minuscolo)
  • %E per i numeri in virgola mobile in formato esponenziale (simbolo "E" maiuscolo)
  • %g utilizza sia il formato esponenziale (minuscolo) e sia il formato decimale in virgola mobile a seconda dei casi
  • %G utilizza sia il formato esponenziale (maiuscolo) e sia il formato decimale in virgola mobile a seconda dei casi
  • %o per i numeri in base otto
  • %x per i numeri in base sedici con caratteri minuscoli
  • %X per i numeri in base sedici con caratteri maiuscoli
  • %% per un vero segno di percentuale

Ad esempio, se vuoi formattare un valore in virgola mobile %f.

print("This value is %f " % 100)

Il segnaposto %f viene sostituito dal valore (100) che segue l'operatore % all'esterno della stringa.

Il risultato in output è il seguente

This value is 100.000000

Se vuoi puoi anche decidere il numero di cifre dopo la virgola.

Ad esempio, il segnaposto %.2f indica una formattazione con due cifre decimali.

print("This value is %.2f " % 100)

Ora il risultato in output è 100.00

This value is 100.00

Se invece vuoi formattare una visualizzazione in numero intero devi usare %d

print("This value is %d " % 99.9)

Il risultato in output è 99.

This value is 99

Come formattare più variabili in una stringa?

Se vuoi formattare più di una variabile all'interno della stringa, inserisci le variabili in una tupla.

Ecco un esempio pratico.

name = "Alice"
age = 25
print("Hello, %s! You are %d years old." % (name, age))

In questo caso Python sostituisce il primo segnaposto %s con la variabile name e il secondo segnaposto %d con la variabile age.

Il risultato in output è il seguente:

"Hello, Alice! You are 25 years old."

Ricorda che l'uso dell'operatore % per la formattazione delle stringhe è considerato obsoleto in Python 3.

Ti consiglio di usare altri metodi di formattazione delle stringhe come il metodo str.format() o le F-strings.

Le chiavi nella formattazione delle stringhe

Nella formattazione delle stringhe puoi anche usare le chiavi per inserire i dati di un dizionario in una stringa, usando il metodo format_map().

stringa.format_map(dizionario)

Ecco un esempio pratico.

Innanzitutto, definisci un dizionario in cui ogni chiave corrisponde a un identificatore che userai nella tua stringa. Ad esempio:

dati = {"nome": "Mario", "età": 30}

In questo caso, la variabile "dati" è un dizionario con due chiavi, "nome" e "età".

Successivamente, scrivi la stringa che desideri formattare, inserendo le chiavi del dizionario all'interno di parentesi graffe {}.

stringa = "Mi chiamo {nome} e ho {età} anni."

Per inserire i valori del dizionario nella stringa, usa il metodo .format_map().

stringa_formattata = stringa.format_map(dati)

In questo modo, Python sostituisce automaticamente ogni chiave nella stringa con il corrispondente valore dal dizionario.

A questo punto, stampa il risultato finale.

print(stringa_formattata)

Questo produrrà l'output:

Mi chiamo Mario e ho 30 anni.

Questo metodo di formattazione è particolarmente utile quando hai molte variabili da inserire in una stringa, perché ti permette di aggiornare i valori senza dover modificare la stringa stessa.

Inoltre, rende il codice più pulito e più facile da leggere.

La larghezza o profondità dei campi nella formattazione

La formattazione delle stringhe tramie l'operatore % ti permette anche di indicare la larghezza minima dei campi. E' molto utile per tabulare le informazioni.

Per impostare una larghezza fissa minima devi anteporre il numero dei caratteri al segnaposto.

  • Se il dato è più corto, Python introduce degli spazi nei caratteri mancanti.
  • Se il dato è più lungo, viene stampato nella sua interezza senza inserire altri caratteri.

Ad esempio, per definire un campo numerico di quattro caratteri devi scrivere %4d

stringa = "Il numero è %4d" % 100
print(stringa)

In questo caso Python stampa 100 inserendo un ulteriore spazio vuoto prima del numero per raggiungere la larghezza minima di 4 caratteri.

Il numero è  100

E' anche possibile indicare lo zero come carattere di riempimento scrivendo %04d.

stringa = "Il numero è %04d" % 100
print(stringa)

In questo caso Python stampa 0100.

Il numero è 0100

L'inserimento dello zero come carattere di riempimento funziona solo se la conversione è numerica. Nel caso dei valori alfanumerici, invece, viene utilizzato lo spazio come riempimento. Ad esempio:

stringa = "Il numero è %4s" % '100'
print(stringa)

Essendo il valore '100' una stringa, in questo caso il carattere di riempimento è lo spazio in bianco.

Il numero è   100

Se il numero da formattare è un numero in virgola mobile, puoi definire il numero delle cifre decimali dopo un punto.

Ad esempio, per visualizzare 100 in dieci cifre, usando lo zero come riempimento, di cui due cifre decimali scrivi %010.2f

stringa = "Il numero è %010.2f" % 100
print(stringa)

Ricorda che èer formattare il numero di cifre decimali Python compie un arrotondamento del numero float e non un troncamento.

Il risultato sullo schermo è il seguente:

Il numero è 0000100.00

Per allineare il numero a sinistra anteponi il carattere meno - scrivendo %-010.2f

stringa = "Il numero è %-010.2f" % 100
print(stringa)

Ricorda che l'allineamento a sinistra elimina il riempimento con gli zeri mentre il numero delle cifre decimali resta quello che hai indicato.

Quindi, il risultato finale è giustificato a sinistra con due cifre decimali.

Il numero è 100.00

Grazie alla profondità del campo puoi tabulare i valori, ovvero disporli ordinatamente in colonna.

Ad esempio, questo script visualizza il quadrato e il cubo dei valori 1, 2, 3 tramite la tabulazione.

  • for i in [1, 2, 3]:
  • stringa = "%5d %5d %5d" % (i, i**2, i**3)
  • print(stringa)

Il ciclo for legge i valori nell'array [1,2,3], calcola e visualizza il quadrato e il cubo di ogni valore in colonna.

    1     1     1
    2     4     8
    3     9    27

Per gestire il segno dei numeri puoi lasciare uno spazio dopo il simbolo % per indicare che deve essere lascitato uno spazio in bianco davanti ai numeri positivi

print("Il numero è % d" % 100)
print("Il numero è % d" % -100)

In questo modo i numeri positivi e negativi sono allineati in colonna.

Il numero è  100
Il numero è -100

Se invece vuoi visualizzare il segno più in modo esplicito, indica il simbolo + nella formattazione 

print("Il numero è %+d" % 100)

Il numero è +100 

In alternativa, puoi impostare una larghezza variabile usando il carattere jolly * e indicando la larghezza, il numero dei caratteri, in una tupla insieme al dato.

Ad esempio, digita questa istruzione

stringa = "Il nome è %*s" % (4, 'Anne')
print(stringa)

In questo caso la tupla indica il numero di caratteri minimi da utilizzare nella prima componente (4) e il dato nella seconda componente ('Anne')

Il nome è Anne

In questo caso, la larghezza minima è variabile (*) e il suo valore è specificato dinamicamente nella tupla (4, 'Anne').

Nelle versioni di Python più recenti è più comune utilizzare il metodo .format() o le f-stringhe (introdotte per la formattazione delle stringhe, poiché offrono una sintassi più leggibile e flessibile.




Se qualcosa non ti è chiaro, scrivi la tua domanda nei commenti.




FacebookTwitterLinkedinLinkedin