Visualizzazione post con etichetta Stringhe. Mostra tutti i post
Visualizzazione post con etichetta Stringhe. Mostra tutti i post

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.

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.