Convertire, formattare¶
Come far stampare a Python quello che vogliamo noi.
Abbiamo visto che esistono diversi tipi di oggetti: int
, float
,
string
, list
, ... È indifferente usare un tipo o un altro? Proviamo a
chiederlo direttamente a Python, costruiamo 3 oggetti che contengono il numero
7:
>>> i = 7
>>> f = 7.
>>> s = "7"
e confrontiamoli tra di loro:
>>> i == f
True
>>> i == s
False
>>> f == s
False
Alcune osservazioni:
- Come vedi il simbolo
=
viene usato in due modi. Nel solito modo funge da operatore di assegnazione. Invece, se ripetuto due volte (così:==
) serve a confrontare due valori. - Se i due valori sono uguali, il confronto darà come risultato
True
, altrimenti darà come risultatoFalse
. True
eFalse
sono particolari oggetti di Python, ed indicano, ovviamente, ciò che tutti noi intendiamo per vero e falso.
Evidentemente i contenuti delle variabili precedenti non sono tutti uguali! E il primo caso? Al suo interno Python tratta in modo diverso numeri interi e numeri razionali o in vircola mobile (float), ma quando serve converte gli interi in razionali.
Python mette a disposizione delle funzioni che cercano di trasformare un
oggetto di un tipo in un oggetto di un altro tipo. È possibile trasformare un
numero intero in un numero numero in virgola mobile e viceversa (ovviamente
perdendo i decimali), una stringa che contiene un numero in un numero
corrispondente e viceversa, un numero in una stringa. Se nella shell omettiamo
l’istruzione print
, IDLE
mostra il dato con alcune informazioni in
più.
>>> i
7
>>> f
7.0
>>> s
'7'
>>> int(f)
7
>>> str(i)
'7'
>>> float(s)
7.0
Nel passaggio da Python 2 a Python 3 il comportamento della divisione è
cambiato: in Python 3 la divisione dà sempre come risultato un numero
decimale (in questa versione anche l’istruzione print
si comporta in
modo differente).
Quanto segue riguarda il comportamento di Python 2. Supponiamo di avere nella
variabile a
il numero 15 e nella variabile b
il numero 4 e di voler
ottenere la stampa di questa stringa: “15/4=3.75”. Creiamo
le nostre variabili e usiamo i metodi che già conosciamo:
>>> a = 15
>>> b = 4
>>> print a, "/", b, "=", a/b
15 / 4 = 3
La divisione dà solo la parte intera del quoziente, ma se trasformiamo una variabile intera in virgola mobile otteniamo il risultato corretto:
>>> print a, "/", b, "=", float(a)/b
15 / 4 = 3.75
I calcoli ora sono esatti, ma non mi piacciono gli spazi inseriti. Per eliminarli, posso evitare le virgole, trasformare in stringhe ogni numero e concatenare le stringhe:
>>> print str(a) + "/" + str(b) + "=" + str(float(a)/b)
15/4=3.75
Ottengo esattamente quello che volevo, ma l’istruzione è penosa da scrivere...
Python mette a disposizione un altro metodo per ottenere lo stesso risultato:
la formattazione di stringhe. Scrivo la stringa come voglio ottenerla, ma al
posto delle variabili metto dei segnaposto: “{}”, a questo punto viene chiamato
il metodo format
passandogli gli argomenti che sostituiranno i segnaposti.
>>> print("{}/{}={}".format(a, b, a/b))
15/4=3.75
Riassumendo
È possibile entro certi limiti trasformare un oggetto in un altro.
Questo permette di trattare interi come float, stringhe come interi, ...
È possibile costruire stringhe con il metodo
format
:<stringa con segnaposti>.format(oggetto1, oggetto2, ...)
usando come segnaposti “{}”.
Prova tu
Prova le seguenti linee di comando e prendi nota di ciò che fa Python.
>>> int(10) >>> int("10") >>> int(10.3) >>> float(10)
>>> float("10") >>> float(10.3) >>> str(10) >>> str("10")
>>> print(str(1.3)+'1') >>> print(str(10)*5) >>> print(float(10)*5) >>> print(float(5)/2)
Riprendi gli esercizi 3, 5, 6 del capitolo riguardante le espressioni e costruisci delle stringhe con la risposta completa al problema usando la conversione di tipo con la concatenazione e poi usando la formattazione di stringhe (ad es. “L’ipotenusa di un triangolo con i cateti lunghi 3 e 4 è lunga 5”).
Metti il valore 5 nella variabile base e il valore 3 nella variabile esponente, poi scrivi il comando per ottenere la stringa: “5^3=125” usando le funzioni di conversione e la formattazione di stringa.
Metti in una variabile un numero intero, poi scrivi l’istruzione che produce la stringa formata dal numero della variabile, dal suo quadrato e dal suo cubo, separati da un tabulatore.