W Pythonie, jak mogę przeanalizować ciąg liczbowy, taki jak „545.2222”, z odpowiadającą mu wartością zmiennoprzecinkową, 542.2222? Lub parsować ciąg „31” na liczbę całkowitą, 31?
Chcę tylko wiedzieć, jak parsować ciąg zmiennoprzecinkowy na zmiennoprzecinkowy i (osobno) ciąg int na int.
Dobrze, że poprosisz o zrobienie tego osobno. Jeśli je miksujesz, być może będziesz się później przygotowywał na problemy. Prosta odpowiedź brzmi:
"545.2222"
unosić:
>>> float("545.2222")
545.2222
"31"
do liczby całkowitej:
>>> int("31")
31
Inne konwersje, ints do iz ciągów znaków i literałów:
Konwersje z różnych baz i powinieneś znać bazę z góry (domyślnie jest to 10). Pamiętaj, że możesz poprzedzić je tym, czego oczekuje Python od jego literałów (patrz poniżej) lub usunąć prefiks:
>>> int("0b11111", 2)
31
>>> int("11111", 2)
31
>>> int('0o37', 8)
31
>>> int('37', 8)
31
>>> int('0x1f', 16)
31
>>> int('1f', 16)
31
Jeśli nie znasz bazy z góry, ale wiesz, że będą miały poprawny przedrostek, Python może wywnioskować to, jeśli podasz 0
jako podstawę:
>>> int("0b11111", 0)
31
>>> int('0o37', 0)
31
>>> int('0x1f', 0)
31
Literały nie dziesiętne (tj. Całkowite) z innych baz
Jeśli twoją motywacją jest posiadanie własnego kodu wyraźnie reprezentującego określone, zakodowane na stałe wartości, może nie być konieczne konwertowanie z baz - możesz pozwolić Pythonowi zrobić to automatycznie za pomocą właściwej składni.
Możesz użyć przedrostków apropos, aby uzyskać automatyczną konwersję na liczby całkowite o następujących literałach . Są one ważne dla Pythona 2 i 3:
Binarny, prefiks 0b
>>> 0b11111
31
Oktalowy, przedrostek 0o
>>> 0o37
31
Szesnastkowy, przedrostek 0x
>>> 0x1f
31
Może to być przydatne przy opisywaniu flag binarnych, uprawnień do plików w kodzie lub wartości szesnastkowych dla kolorów - na przykład nie zauważaj cudzysłowów:
>>> 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
Dostosowywanie dwuznacznych oktałów Python 2 do Python 3
Jeśli widzisz liczbę całkowitą rozpoczynającą się od 0, w Pythonie 2 jest to (przestarzała) składnia ósemkowa.
>>> 037
31
Jest źle, ponieważ wygląda na to, że wartość powinna być 37
. W Pythonie 3 pojawia się teraz SyntaxError
:
>>> 037
File "<stdin>", line 1
037
^
SyntaxError: invalid token
Konwertuj liczby ósemkowe w języku Python 2 na liczby ósemkowe, które działają zarówno w 2, jak i 3 z 0o
prefiksem:
>>> 0o37
31
type(my_object)
go. Wynik można zwykle wywołać jako funkcję konwersji. Na przykładtype(100)
powodujeint
, że możesz zadzwonić,int(my_object)
aby spróbować przekonwertowaćmy_object
na liczbę całkowitą. To nie zawsze działa, ale jest dobrym „pierwszym odgadnięciem” podczas kodowania.