Как в Python разобрать числовую строку, например "545.2222", на соответствующее ей значение с плавающей запятой, 542.2222? Или преобразовать строку «31» в целое число, 31? Я просто хочу знать, как преобразовать строку с плавающей точкой в число с плавающей запятой и (отдельно) строку типа int в значение типа int.
Хорошо, что вы просите сделать это отдельно. Если вы их смешиваете, возможно, вы создадите себе проблемы позже. Простой ответ:
"545.2222"
плавать:
>>> float("545.2222")
545.2222
"31"
до целого числа:
>>> int("31")
31
Другие преобразования, целые числа в строки и литералы и из них:
Конверсии из разных баз, и вы должны знать базу заранее (по умолчанию 10). Обратите внимание, что вы можете префиксировать их тем, что Python ожидает от своих литералов (см. Ниже), или удалить префикс:
>>> int("0b11111", 2)
31
>>> int("11111", 2)
31
>>> int('0o37', 8)
31
>>> int('37', 8)
31
>>> int('0x1f', 16)
31
>>> int('1f', 16)
31
Если вы не знаете заранее базу, но знаете, что у них будет правильный префикс, Python может сделать это за вас, если вы передадите 0
в качестве базы:
>>> int("0b11111", 0)
31
>>> int('0o37', 0)
31
>>> int('0x1f', 0)
31
Недесятичные (т.е. целочисленные) литералы из других основ
Однако, если ваша мотивация состоит в том, чтобы ваш собственный код четко представлял жестко запрограммированные конкретные значения, вам может не потребоваться преобразование из баз - вы можете позволить Python сделать это за вас автоматически с правильным синтаксисом.
Вы можете использовать префиксы apropos для автоматического преобразования в целые числа с помощью следующих литералов < / а>. Они действительны для Python 2 и 3:
Двоичный, префикс 0b
>>> 0b11111
31
Восьмеричный, префикс 0o
>>> 0o37
31
Шестнадцатеричный, префикс 0x
>>> 0x1f
31
Это может быть полезно при описании двоичных флагов, прав доступа к файлам в коде или шестнадцатеричных значений цветов - например, не обращайте внимания на кавычки:
>>> 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
Делаем неоднозначные восьмеричные числа Python 2 совместимыми с Python 3
Если вы видите целое число, которое начинается с 0, в Python 2 это (устаревший) восьмеричный синтаксис.
>>> 037
31
Это плохо, потому что похоже, что значение должно быть 37
. Итак, в Python 3 теперь возникает SyntaxError
:
>>> 037
File "<stdin>", line 1
037
^
SyntaxError: invalid token
Преобразуйте восьмеричные числа Python 2 в восьмеричные числа, которые работают как в 2, так и в 3, с префиксом 0o
:
>>> 0o37
31
person
Aaron Hall
schedule
23.07.2015
type(my_object)
. Результат обычно можно вызвать как функцию для преобразования. Например,type(100)
приводит кint
, поэтому вы можете вызватьint(my_object)
, чтобы попытаться преобразоватьmy_object
в целое число. Это не всегда работает, но это хорошее первое предположение при кодировании. - person robertlayton   schedule 05.07.2018ValueError: invalid literal for int() with base 10: '1.5'
. - person marcelm   schedule 14.10.2020