venerdì 1 marzo 2013

Formattazione di stringhe tramite l'operatore % - 2a parte

I segnaposto %s e %d, rispettivamente stringa e numero, visti nel post precedente parlando di espressioni di formattazione di stringa, non sono gli unici possibili: esistono molti altri di quelli che in realtà si chiamano codici di formattazione. Vediamo come usarli con qualche altro esempio.

Stampiamo il valore di pigreco in tre modi diversi. Così come disponibile in Python attraverso il suo modulo math:

>>> import math
>>> print(math.pi)
3.141592653589793

Con 2 cifre di precisione e zero colonne di ampiezza che sta per "nessun incolonnamento", quindi nessuna giustificazione:

>>> print("%0.2f" % math.pi)
3.14

Con 4 cifre di precisione e zero colonne di ampiezza. Notare l'arrotondamento del valore di pigreco, 3.14159 arrotondato a 3.1416:

>>> print("%0.4f" % math.pi)
3.1416

Finora si è parlato sempre di giustificazione a destra, ma è possibile giustificare le stringhe anche a sinistra. Riprendiamo un esempio già visto ma modificato in tal senso:

"""Stampa 3 variabile: un numero, il numero elevato al quadrato ed elevato 
alla quinta, ognuna come stringa ampia 6 colonne giustificata a sinistra.
"""
for x in range(1,10):
    y = x ** 2
    z = x ** 5
    print("%-6s%-6s%-6s" % (x,y,z))

1     1     1     
2     4     32    
3     9     243   
4     16    1024  
5     25    3125  
6     36    7776  
7     49    16807 
8     64    32768 
9     81    59049

Altro esempio:

# Formattazione di stringa ampia 9 colonne, con e senza zeri di riempimento.
x = 98765
stringa = "Zeri di riempimento, %09d; senza zeri di riempimento, %9d." % (x, x)
print(stringa)

Zeri di riempimento, 000098765; senza zeri di riempimento,     98765.

Notate come il numero più a destra qui sopra sia molto spostato a destra rispetto alla virgola. È dovuto al fatto che è rappresentato da un numero ampio comunque 9 colonne come quello che lo precede, ma non ha gli zeri di riempimento.

Un esempio di notazione scientifica:

# Formattazione di stringa ampia 9 colonne, con e senza zeri di riempimento.
x = 98765
print("%010.4e." % x)

9.8765e+04.

Un ultimo esempio che vediamo è quello in cui non sappiamo esattamente quante colonne deve essere ampio numero, ne il numero di cifre significative che servono. In questo caso possiamo usare delle variabili ulteriori per specificarlo come in questo esempio:

import math

x = math.pi
larghezza = 8
precisione = 5
stringa = "%08.5f, %0*.*f" % (x, larghezza, precisione, x)
print(stringa)

03.14159, 03.14159

Potete notare come il secondo pigreco è formattato esattamente come il primo.

Il risultato è stato ottenuto inserendo degli asterischi al posto dei valori sconosciuti (larghezza in colonne del numero e precisione richiesta) nella stringa di formattazione a sinistra di %, alla sua destra invece, nelle parentesi tonde, sono state inseriti delle variabili nello stesso ordine delle informazioni mancanti.

Questo è solo un primo approccio alla formattazione di stringhe in Python tramite l'operatore %. Giocateci un po' a casa così da dissipare sul campo eventuali dubbi, e sperimentate ulteriori codici di formattazione di stringe fra quelli disponibili.