In Python, come posso analizzare una stringa numerica come "545.2222" al suo corrispondente valore float, 542.2222? O analizzare la stringa "31" in un numero intero, 31?
Voglio solo sapere come analizzare una stringa float in un float e (separatamente) una stringa int in un int.
È bene che tu chieda di farlo separatamente. Se li stai mescolando, potresti essere pronto per problemi in seguito. La semplice risposta è:
"545.2222"
galleggiare:
>>> float("545.2222")
545.2222
"31"
a un numero intero:
>>> int("31")
31
Altre conversioni, ints da e verso stringhe e valori letterali:
Conversioni da varie basi e dovresti conoscere la base in anticipo (10 è l'impostazione predefinita). Nota che puoi prefissarli con ciò che Python si aspetta per i suoi valori letterali (vedi sotto) o rimuovere il prefisso:
>>> int("0b11111", 2)
31
>>> int("11111", 2)
31
>>> int('0o37', 8)
31
>>> int('37', 8)
31
>>> int('0x1f', 16)
31
>>> int('1f', 16)
31
Se non conosci la base in anticipo, ma sai che avranno il prefisso corretto, Python può dedurlo per te se passi 0
come base:
>>> int("0b11111", 0)
31
>>> int('0o37', 0)
31
>>> int('0x1f', 0)
31
Letterali non decimali (cioè interi) da altre basi
Se la tua motivazione è che il tuo codice rappresenti chiaramente valori specifici codificati, tuttavia, potrebbe non essere necessario convertire dalle basi: puoi lasciare che Python lo faccia automaticamente per te con la sintassi corretta.
È possibile utilizzare i prefissi apropos per ottenere la conversione automatica in numeri interi con i seguenti letterali . Questi sono validi per Python 2 e 3:
Binario, prefisso 0b
>>> 0b11111
31
Ottale, prefisso 0o
>>> 0o37
31
Esadecimale, prefisso 0x
>>> 0x1f
31
Ciò può essere utile quando si descrivono flag binari, autorizzazioni di file nel codice o valori esadecimali per i colori, ad esempio non notare virgolette:
>>> 0b10101 # binary flags
21
>>> 0o755 # read, write, execute perms for owner, read & ex for group & others
493
>>> 0xffffff # the color, white, max values for red, green, and blue
16777215
Rendere ambigui gli ottali Python 2 compatibili con Python 3
Se vedi un numero intero che inizia con uno 0, in Python 2, questa è sintassi ottale (deprecata).
>>> 037
31
È un male perché sembra che il valore dovrebbe essere 37
. Quindi in Python 3 ora genera un SyntaxError
:
>>> 037
File "<stdin>", line 1
037
^
SyntaxError: invalid token
Converti i tuoi ottali Python 2 in ottali che funzionano sia in 2 che in 3 con il 0o
prefisso:
>>> 0o37
31
type(my_object)
. Il risultato può di solito essere chiamato come una funzione per fare la conversione. Ad esempio,type(100)
risultaint
, quindi puoi chiamareint(my_object)
per provare a convertiremy_object
in un numero intero. Questo non sempre funziona, ma è una buona "prima ipotesi" durante la programmazione.