venerdì 22 febbraio 2013

Formattazione di stringhe tramite l'operatore %

Python possiede numerosi strumenti per la formattazione delle stringhe. Quelli classici sono la concatenazione e le operazioni sulle sequenze come il sezionamento. Per esempio (in Python 3.x, per Python 2.x ricordatevi non servono le parenti per print):

concatenazione di stringhe

>>> concatenazione = "Stringa" + "intera"
>>> print(concatenazione)
Stringaintera

sezionamento di stringhe

>>> print(concatenazione[0:6])
String

Molto più sofisticate sono le "espressioni di formattazione di stringa". Qualche esempio per capire cosa sono e come funzionano:

>>> nome = "Pippo"
>>> eta = 50
>>> print("Ti chiami %s." % nome)
Ti chiami Pippo.

In pratica % fa da segnaposto all'interno della stringa fra i doppi apici: quando print viene eseguita il segnaposto viene sostituito con quanto disponibile nella variabile nome ed il tutto viene stampato. I segnaposto possono essere anche più di uno, così:

>>> print("Ti chiami %s e hai %d anni." % (nome, eta))
Ti chiami Pippo e hai 50 anni.

Da notare come i due segnaposto sono diversi:
  • il primo, %s, ha una s che sta per string (stringa) e indica che in quella posizione dovrà esserci una stringa di testo;
  • il secondo, %d, ha una d che sta per digit (numero) e indica che in quella posizione dovrà esserci un numero.
Inoltre quando le variabili a destra di % sono più d'una, vanno tra parentesi tonde.

Vediamo qualche altro esempio. Immaginiamo di voler visualizzare un numero da 1 a 9, e a fianco quel numero elevato sia al quadrato che al cubo:

1 1 1
2 4 8
3 9 27
4 16 64
5 25 125
6 36 216
7 49 343
8 64 512
9 81 729

Per generare questo assortimento male allineato di numeri bastano poche righe:

1
2
3
4
for x in range(1, 10):
    quadrato = x ** 2
    cubo = x ** 3
    print(x, quadrato , cubo)

Allineiamo le cifre tutte a destra usando un'espressione di formattazione di stringa:

1
2
3
4
for x in range(1,10):
    quadrato = x ** 2
    cubo = x ** 3
    print("numero:%4d%4d%4d" % (x, quadrato , cubo))

Il risultato:

   1   1   1
   2   4   8
   3   9  27
   4  16  64
   5  25 125
   6  36 216
   7  49 343
   8  64 512
   9  81 729

Da notare che %d ora è diventato %4d, dove il 4 sta a significare che ogni cifra deve essere formattata come se fosse ampia 4 colonne anche quando il numero è più piccolo.

Fate attenzione invece al caso in cui il numero o più in generale la stringa da formattare è più grande delle colonne da noi stabilite: in questo caso Python non applica nessuna formattazione.

Nel prossimo post vedremo ulteriori utilizzi dell'operatore % di formattazione delle stringhe.