Как перевести str в float python
Осваиваем Python: преобразование строки в число на конкретных примерах
Иногда требуется преобразовать строку в целое число или в число с плавающей точкой для осуществления определённых операций в Python.
Если вы попробуете выполнить то или иное действие со строкой в виде чисел, то получите ошибку.
Этот код приведёт к ошибке :
В Python можно использовать функции int и float для преобразования строки в целое число или число с плавающей точкой до осуществления каких-либо операций.
Использование функции int() для преобразования строки в целое число
Рассмотрим следующий код:
Будет выведен новый список, состоящий из целых чисел, полученных из строк.
Преобразование списка строк в список чисел с плавающей точкой
Аналогичным образом можно использовать float вместо int для преобразования списка, содержащего строки из целых чисел. Рассмотрим пример:
Код для преобразования элементов списка в числа с плавающей точкой:
Пример преобразования строки с запятыми в число
Ну а как насчёт строки наподобие “5,000,000”? Если попытаетесь преобразовать ее, используя функции int() или float() , то получите ошибку.
Решением будет использование import locale . Например:
Но это может вызвать проблемы в остальных локалях. Другое решение заключается в том, чтобы заменить запятые пустыми строками, то есть“”, а затем использовать функцию int.
В результате получаем целое значение. Это же решение можно применить для конвертации строки в число с плавающей точкой.
Преобразование строки в число для расчёта високосного года -пример
Пользовательский ввод в Python- программах воспринимается как строка. В следующем примере пользователя просят ввести год. После ввода значения программа сообщает, високосный это год или нет.
Для этого введённое значение сначала преобразуется в целое число, а затем используется формула расчёта високосного года.
Вводимая строка сразу преобразуется в целое число, а затем используется для расчёта.
Как преобразовать целое число в строку?
Для преобразования целых чисел в строки в Python можно использовать функцию str() . Функция str() принимает объект, который может быть типа int , float , double и т. п.
Рассмотрим пример преобразования переменной типа int в строку, которая затем используется как строка для конкатенации:
Если бы целочисленная переменная была использована без функции str(), возникла бы ошибка TypeError.
Пожалуйста, оставляйте ваши комментарии по текущей теме статьи. Мы очень благодарим вас за ваши комментарии, лайки, дизлайки, подписки, отклики!
Дайте знать, что вы думаете по данной теме статьи в комментариях. За комментарии, лайки, отклики, подписки, дизлайки низкий вам поклон!
Сергей Бензенко автор-переводчик статьи « 5 examples to Convert a Python string to int and float »
Преобразование типов данных в Python 3
Типы данных в Python позволяют классифицировать данные, определить значения, которые можно присвоить, и операции, которые можно выполнить с этими данными. В программировании бывает необходимо конвертировать один тип данных в другой, чтобы получить доступ к другим функциям: например, склеить числовые значения со строками или представить целые числа в виде десятичных.
Данное руководство научит вас преобразовывать числа, строки, кортежи и списки.
Преобразование числовых типов
В Python существует два числовых типа данных: целые числа и числа с плавающей точкой. Для преобразования целых чисел в числа с плавающей точкой и наоборот Python предоставляет специальные встроенные методы.
Преобразование целых чисел в числа с плавающей точкой
Метод float() преобразовывает целые числа в числа с плавающей точкой. Число указывается в круглых скобках:
Это преобразует число 57 в 57.0.
Также можно использовать переменные. Объявите переменную f = 57, а затем выведите число с плавающей точкой:
f = 57
print(float(f))
57.0
Преобразование чисел с плавающей точкой в целые числа
Встроенная функция int() предназначена для преобразования чисел с плавающей точкой в целые числа.
Функция int() работает так же, как и float(). Чтобы преобразовать число, добавьте его в круглые скобки:
Число 390. 8 преобразуется в 390.
Эта функция также может работать с переменными. Объявите переменные:
b = 125.0
c = 390.8
Затем преобразуйте и отобразите их:
print(int(b))
print(int(c))
125
390
Чтобы получить целое число, функция int() отбрасывает знаки после запятой, не округляя их (потому 390.8 не преобразовывается в 391).
Преобразование чисел с помощью деления
При делении Python 3 может преобразовать целое число в число с плавающей точкой (в Python 2 такой функции нет). К примеру, разделив 5 на 2, вы получите 2.5.
Python не преобразовывает тип данных во время деления; следовательно, деля целое число на целое число, в результате вы получили бы целое число, 2.
Преобразование строк
Строка – это последовательность из одного или больше символов (цифр, букв и других символов). Строки – очень распространённый тип данных в программировании. Существует много способов преобразования строк.
Преобразование чисел в строки
Чтобы конвертировать число в строку, используйте метод str(). Поместите число или переменную в круглые скобки.
Попробуйте преобразовать целое число, например:
Запустив метод str(12) в интерактивной оболочке Python (с помощью команды python), вы получите вывод:
Кавычки означают, что теперь 12 является строкой, а не числом.
Особенно полезно преобразовывать числа в строки, используя переменные. К примеру, можно отследить, сколько строк кода в день пишет тот или иной пользователь. Если пользователь пишет больше 50 строк, программа отправит ему поощрительное сообщение.
user = «Michael»
lines = 50
print(«Congratulations, » + user + «! You just wrote » + lines + » lines of code.»)
Запустив этот код, вы получите ошибку:
TypeError: Can’t convert ‘int’ object to str implicitly
Python не может склеивать строки с числами, потому нужно преобразовать значение lines в строку.
user = «Michael»
lines = 50
print(«Congratulations, » + user + «! You just wrote » + str(lines) + » lines of code. »)
Теперь, запустив код, вы увидите:
Congratulations, Michael! You just wrote 50 lines of code.
Метод str() может преобразовать в строку и число с плавающей точкой. Поместите в круглые скобки число или переменную:
print(str(421.034))
f = 5524.53
print(str(f))
421.034
5524.53
Попробуйте выполнить конкатенацию строки и преобразованного в строку числа:
f = 5524.53
print(«Michael has » + str(f) + » points.»)
Michael has 5524.53 points.
Преобразование строк в числа
Строки можно преобразовать в числа с помощью методов int() и float()
Если в строке нет десятичных знаков, лучше преобразовать её в целое число. Для этого используется int().
Попробуйте расширить предыдущий пример кода, который отслеживает количество написанных строк. Пусть программа отслеживает, сколько строк пишет пользователь каждый день.
lines_yesterday = «50»
lines_today = «108»
lines_more = lines_today — lines_yesterday
print(lines_more)
TypeError: unsupported operand type(s) for -: ‘str’ and ‘str’
При запуске возникла ошибка, поскольку Python не может выполнить сложение строк. Преобразуйте строки в числа и попробуйте снова запустить программу:
lines_yesterday = «50»
lines_today = «108»
lines_more = int(lines_today) — int(lines_yesterday)
print(lines_more)
58
Значение переменной lines_more – это число, в данном случае это 58.
Также можно преобразовать числа в предыдущем примере в числа с плавающей точкой. Для этого используйте метод float() вместо int().
К примеру, очки начисляются в десятичных значениях.
total_points = «5524.53»
new_points = «45.30»
new_total_points = total_points + new_points
print(new_total_points)
5524.5345.30
В данном случае оператор + склеивает две строки, а не складывает числа. Потому в результате получилось довольно странное значение.
Конвертируйте эти строки в числа с плавающей точкой, а затем выполните сложение.
total_points = «5524.53»
new_points = «45.30»
new_total_points = float(total_points) + float(new_points)
print(new_total_points)
5569. 83
Как видите, теперь программа возвращает ожидаемый результат.
Если вы попробуете преобразовать строку с десятичными значениями в целое число, вы получите ошибку:
f = «54.23»
print(int(f))
ValueError: invalid literal for int() with base 10: ‘54.23’
Преобразование в кортежи и списки
Чтобы преобразовать данные в кортеж или список, используйте методы tuple() и list() соответственно. В Python:
- Список – это изменяемая упорядоченная последовательность элементов, взятая в квадратные скобки ([ ]).
- Кортеж – неизменяемая упорядоченная последовательность элементов, взятая в круглые скобки.
Преобразование списка в кортеж
Преобразовывая список в кортеж, вы можете оптимизировать программу. Для преобразования в кортеж используется метод tuple().
print(tuple([‘pull request’, ‘open source’, ‘repository’, ‘branch’]))
(‘pull request’, ‘open source’, ‘repository’, ‘branch’)
Выведенные на экран данные являются кортежем, а не списком, поскольку они взяты в круглые скобки.
Попробуйте использовать tuple() с переменной:
sea_creatures = [‘shark’, ‘cuttlefish’, ‘squid’, ‘mantis shrimp’] print(tuple(sea_creatures))
(‘shark’, ‘cuttlefish’, ‘squid’, ‘mantis shrimp’)
В кортеж можно преобразовать любой итерируемый тип, включая строки:
Конвертируя в кортеж числовой тип данных, вы получите ошибку:
print(tuple(5000))
TypeError: ‘int’ object is not iterable
Преобразование в списки
Вы можете преобразовать кортеж в список, чтобы сделать его изменяемым.
Обратите внимание: при этом в методах list() и print() используется две пары круглых скобок. Одни принадлежать собственно методу, а другие – кортежу.
print(list((‘blue coral’, ‘staghorn coral’, ‘pillar coral’)))
[‘blue coral’, ‘staghorn coral’, ‘pillar coral’]
Если данные, которые вывел метод print, заключены в квадратные скобки, значит, кортеж преобразовался в список.
Чтобы избежать путаницы с круглыми скобками, можно создать переменную:
coral = (‘blue coral’, ‘staghorn coral’, ‘pillar coral’)
list(coral)
Строки тоже можно преобразовывать в списки:
Заключение
Теперь вы умеете преобразовывать различные типы данных Python с помощью встроенных методов, благодаря чему код вашей программы может стать более гибким.
Преобразование числа из строки в тип int и float.
Python не позволит сложить строку и число, даже если строка выглядит как число, то есть содержит только цифры:
В архитектуре языка оператор ‘+’ может означать как операцию сложения, так и операцию конкатенации, вследствие чего выбор типа преобразования становится неочевидным. Поэтому интерпретатор воспринимает такую инструкцию как ошибочную. В этом случае нужно использовать инструменты преобразования, чтобы можно было интерпретировать строку как число или наоборот.
Преобразование строковой версии числа в int или float .
Преобразование строки в тип int .
Функции int и float преобразует строку в число, функция str преобразует число в строковое представление. В Python нельзя смешивать строковые и числовые типы в таких операторах, как ‘+’ , но можно вручную выполнить необходимые преобразования перед выполнением.
Преобразование строки в тип float .
Преобразование списка строк в список чисел.
Для преобразования списка строк с числами в список целых чисел можно ввести проверку перед преобразованием на то, что строка состоит только из десятичных чисел str.isdigit() .
Для преобразования списка строк с числами включая десятичные c разделением их по типам, необходимо перед преобразованием в тип float проверять строку на вхождение точки ‘.’ .
Для преобразования всех чисел в тип float , можно просто заменять точку в строке с числом и проверять получившуюся строку на десятичное число.
Преобразование типов данных в Python 3
24 ноября, 2016 12:10 пп 114 307 views | Комментариев нетPython | Amber | Комментировать запись
Типы данных в Python позволяют классифицировать данные, определить значения, которые можно присвоить, и операции, которые можно выполнить с этими данными. В программировании бывает необходимо конвертировать один тип данных в другой, чтобы получить доступ к другим функциям: например, склеить числовые значения со строками или представить целые числа в виде десятичных.
Данное руководство научит вас преобразовывать числа, строки, кортежи и списки.
Читайте также: Типы данных в Python 3
Преобразование числовых типов
В Python существует два числовых типа данных: целые числа и числа с плавающей точкой. Для преобразования целых чисел в числа с плавающей точкой и наоборот Python предоставляет специальные встроенные методы.
Преобразование целых чисел в числа с плавающей точкой
Метод float() преобразовывает целые числа в числа с плавающей точкой. Число указывается в круглых скобках:
float(57)
Это преобразует число 57 в 57.0.
Также можно использовать переменные. Объявите переменную f = 57, а затем выведите число с плавающей точкой:
f = 57
print(float(f))
57.0
Преобразование чисел с плавающей точкой в целые числа
Встроенная функция int() предназначена для преобразования чисел с плавающей точкой в целые числа.
Функция int() работает так же, как и float().
int(390.8)
Число 390.8 преобразуется в 390.
Эта функция также может работать с переменными. Объявите переменные:
b = 125.0
c = 390.8
Затем преобразуйте и отобразите их:
print(int(b))
print(int(c))
125
390
Чтобы получить целое число, функция int() отбрасывает знаки после запятой, не округляя их (потому 390.8 не преобразовывается в 391).
Преобразование чисел с помощью деления
При делении Python 3 может преобразовать целое число в число с плавающей точкой (в Python 2 такой функции нет). К примеру, разделив 5 на 2, вы получите 2.5.
a = 5 / 2
Python не преобразовывает тип данных во время деления; следовательно, деля целое число на целое число, в результате вы получили бы целое число, 2.
Читайте также: Python 2 vs Python 3: краткий обзор и практические соображения
Преобразование строк
Строка – это последовательность из одного или больше символов (цифр, букв и других символов). Строки – очень распространённый тип данных в программировании. Существует много способов преобразования строк.
Читайте также: Основы работы со строками в Python 3
Преобразование чисел в строки
Чтобы конвертировать число в строку, используйте метод str(). Поместите число или переменную в круглые скобки.
Попробуйте преобразовать целое число, например:
str(12)
Запустив метод str(12) в интерактивной оболочке Python (с помощью команды python), вы получите вывод:
'12'
Кавычки означают, что теперь 12 является строкой, а не числом.
Особенно полезно преобразовывать числа в строки, используя переменные. К примеру, можно отследить, сколько строк кода в день пишет тот или иной пользователь. Если пользователь пишет больше 50 строк, программа отправит ему поощрительное сообщение.
user = "Michael"
lines = 50
Запустив этот код, вы получите ошибку:
TypeError: Can't convert 'int' object to str implicitly
Python не может склеивать строки с числами, потому нужно преобразовать значение lines в строку.
user = "Michael"
lines = 50
print("Congratulations, " + user + "! You just wrote " + str(lines) + " lines of code.")
Теперь, запустив код, вы увидите:
Congratulations, Michael! You just wrote 50 lines of code.
Метод str() может преобразовать в строку и число с плавающей точкой. Поместите в круглые скобки число или переменную:
print(str(421.034))
f = 5524.53
print(str(f))
421.034
5524.53
Попробуйте выполнить конкатенацию строки и преобразованного в строку числа:
f = 5524.53
print("Michael has " + str(f) + " points.")
Michael has 5524.53 points.
Преобразование строк в числа
Строки можно преобразовать в числа с помощью методов int() и float()
Если в строке нет десятичных знаков, лучше преобразовать её в целое число. Для этого используется int().
Попробуйте расширить предыдущий пример кода, который отслеживает количество написанных строк. Пусть программа отслеживает, сколько строк пишет пользователь каждый день.
lines_yesterday = "50"
lines_today = "108"
lines_more = lines_today - lines_yesterday
print(lines_more)
TypeError: unsupported operand type(s) for -: 'str' and 'str'
При запуске возникла ошибка, поскольку Python не может выполнить сложение строк. Преобразуйте строки в числа и попробуйте снова запустить программу:
lines_yesterday = "50"
lines_today = "108"
lines_more = int(lines_today) - int(lines_yesterday)
print(lines_more)
58
Значение переменной lines_more – это число, в данном случае это 58.
Также можно преобразовать числа в предыдущем примере в числа с плавающей точкой. Для этого используйте метод float() вместо int().
К примеру, очки начисляются в десятичных значениях.
total_points = "5524. 53"
new_points = "45.30"
new_total_points = total_points + new_points
print(new_total_points)
5524.5345.30
В данном случае оператор + склеивает две строки, а не складывает числа. Потому в результате получилось довольно странное значение.
Конвертируйте эти строки в числа с плавающей точкой, а затем выполните сложение.
total_points = "5524.53"
new_points = "45.30"
new_total_points = float(total_points) + float(new_points)
print(new_total_points)
5569.83
Как видите, теперь программа возвращает ожидаемый результат.
Если вы попробуете преобразовать строку с десятичными значениями в целое число, вы получите ошибку:
f = "54.23"
print(int(f))
ValueError: invalid literal for int() with base 10: '54.23'
Преобразование в кортежи и списки
Чтобы преобразовать данные в кортеж или список, используйте методы tuple() и list() соответственно. В Python:
- Список – это изменяемая упорядоченная последовательность элементов, взятая в квадратные скобки ([ ]).
- Кортеж – неизменяемая упорядоченная последовательность элементов, взятая в круглые скобки.
Преобразование списка в кортеж
Преобразовывая список в кортеж, вы можете оптимизировать программу. Для преобразования в кортеж используется метод tuple().
print(tuple(['pull request', 'open source', 'repository', 'branch']))
('pull request', 'open source', 'repository', 'branch')
Выведенные на экран данные являются кортежем, а не списком, поскольку они взяты в круглые скобки.
Попробуйте использовать tuple() с переменной:
sea_creatures = ['shark', 'cuttlefish', 'squid', 'mantis shrimp']
print(tuple(sea_creatures))
В кортеж можно преобразовать любой итерируемый тип, включая строки:
print(tuple('Michael'))
('M', 'i', 'c', 'h', 'a', 'e', 'l')
Конвертируя в кортеж числовой тип данных, вы получите ошибку:
print(tuple(5000))
TypeError: 'int' object is not iterable
Преобразование в списки
Вы можете преобразовать кортеж в список, чтобы сделать его изменяемым.
Обратите внимание: при этом в методах list() и print() используется две пары круглых скобок. Одни принадлежать собственно методу, а другие – кортежу.
print(list(('blue coral', 'staghorn coral', 'pillar coral')))
['blue coral', 'staghorn coral', 'pillar coral']
Если данные, которые вывел метод print, заключены в квадратные скобки, значит, кортеж преобразовался в список.
Чтобы избежать путаницы с круглыми скобками, можно создать переменную:
coral = ('blue coral', 'staghorn coral', 'pillar coral')
list(coral)
Строки тоже можно преобразовывать в списки:
print(list('Michael'))
['M', 'i', 'c', 'h', 'a', 'e', 'l']
Заключение
Теперь вы умеете преобразовывать различные типы данных Python с помощью встроенных методов, благодаря чему код вашей программы может стать более гибким.
3 особенности чисел в Python, о которых вы, возможно, не знали / Хабр
Если вы писали код на Python, то весьма высока вероятность того, что вы, хотя бы в одной из своих программ, пользовались числами. Например, это могли быть целые числа для указания индекса значения в списке, или числа с плавающей точкой, представляющие суммы в некоей валюте.
Но числа в Python — это гораздо больше, чем, собственно, их числовые значения. Поговорим о трёх особенностях чисел в Python, с которыми вы, возможно, не знакомы.
№1: у чисел есть методы
В Python практически всё — это объект. Один из первых объектов, о котором узнаёт тот, кто начинает изучать Python — это str
, используемый для представления строк. Возможно, вы сталкивались с использованием методов строк, вроде .lower()
, который возвращает новую строку, все символы которой приведены к нижнему регистру:
>>> "HELLO".lower() 'hello'
Числа в Python тоже, как и строки, являются объектами. У них тоже есть методы. Например, целое число можно преобразовать в байтовую строку с помощью метода .to_bytes()
:
>>> n = 255 >>> n.to_bytes(length=2, byteorder="big") b'\x00\xff'
Параметр length
указывает на количество байт, которые нужно использовать при составлении байтовой строки, а параметр byteorder
определяет порядок байт. Например, установка параметра byteorder
в значение «big»
приводит к возврату байтовой строки, в которой старший байт расположен первым, а установка этого параметра в значение «little»
приводит к тому, что первым идёт младший байт.
255 — это максимальное значение, которое может принимать 8-битное целое число. Поэтому в нашем случае при вызове метода .to_bytes()
можно без проблем воспользоваться параметром length=1
:
>>> n.to_bytes(length=1, byteorder="big") b'\xff'
А вот если записать в n
число 256 и вызвать для него .to_bytes()
с параметром length=1
, будет выдана ошибка OverflowError
:
>>> n = 256 >>> n.to_bytes(length=1, byteorder="big") Traceback (most recent call last): File "<stdin>", line 1, in <module> OverflowError: int too big to convert
Преобразовать байтовую строку в целое число можно, воспользовавшись методом . from_bytes()
класса int
:
>>> int.from_bytes(b'\x06\xc1', byteorder="big") 1729
Методы класса вызывают, используя имя класса, а не его экземпляр. Именно поэтому в предыдущем примере метод .from_bytes()
вызывают, обращаясь к int
.
Любопытный факт: 1729 — это самое маленькое положительное число, которое можно представить в виде суммы кубов двух положительных чисел двумя способами. Исторический анекдот связывает это число с индийским математиком Сринивасой Рамануджаном, который рассказал о нём своему наставнику Готфри Харолду Харди.
Харди часто навещал Рамануджана, когда тот, умирая, находился в больнице в Патни. Именно в одно из таких посещений произошёл «инцидент» с номером такси. Харди приехал в Патни на такси, воспользовавшись своим излюбленным транспортным средством. Он вошёл в палату, где лежал Рамануджан. Начинать разговор Харди всегда было мучительно трудно, и он произнёс свою первую фразу: «Если не ошибаюсь, то номер такси, на котором я приехал, 1729. Мне кажется, это скучное число». На что Рамануджан тотчас же ответил: «Нет, Харди! О нет! Это очень интересное число. Это самое малое из чисел, представимых в виде суммы двух кубов двумя различными способами».
Один из способов представления числа 1729 в виде суммы двух кубов — это 13 + 123. Можете отыскать второй способ?
У чисел с плавающей точкой тоже есть методы. Возможно, самый полезный из них — это .is_integer()
. Его используют для проверки того, есть ли у числа с плавающей точкой дробная часть:
>>> n = 2.0 >>> n.is_integer() True >>> n = 3.14 >>> n.is_integer() False
Вот — интересный метод .as_integer_ratio()
. Он, вызванный для числа с плавающей точкой, возвращает кортеж, содержащий числитель и знаменатель дроби, представляющей это число:
>>> n.as_integer_ratio() (1, 2)
Правда, из-за ошибки представления чисел с плавающей точкой, иногда этот метод возвращает неожиданные результаты:
>>> n = 0. SyntaxError: invalid syntax >>> 3.14.is_integer() False
Полный список методов числовых Python-типов можно найти в документации.
№2: числа обладают иерархией
В математике числа обладают естественной иерархией. Например, все натуральные числа являются целыми, а все целые числа — рациональными. Все рациональные числа — это вещественные числа, а все вещественные числа — это комплексные числа.
Похожие рассуждения применимы и к представлению чисел в Python. Здесь «числовая башня» выражается через абстрактные типы, содержащиеся в модуле numbers
.
Числовая башня
Все числа в Python являются экземплярами класса Number
:
>>> from numbers import Number >>> # Целые числа являются наследниками Number >>> isinstance(1729, Number) True >>> # Числа с плавающей точкой являются наследниками Number >>> isinstance(3.14, Number) True >>> # Комплексные числа являются наследниками Number >>> isinstance(1j, Number) True
Если нужно узнать о том, является ли некое Python-значение числовым, но при этом неважно то, каким именно числовым типом оно представлено, воспользуйтесь конструкцией isinstance(value, Number)
.
В Python имеется четыре дополнительных абстрактных типа, иерархия которых, начиная с наиболее общего числового типа, выглядит так:
Класс
Complex
используется для представления комплексных чисел. Тут имеется один встроенный конкретный тип —complex
.Класс
Real
— это представление вещественных чисел. Его единственный встроенный конкретный тип —float
.Класс
Rational
представляет рациональные числа. Его единственным встроенным конкретным типом являетсяFraction
.Класс
Integral
применяют для представления целых чисел. В нём имеется два встроенных конкретных типа —int
иbool
.
Так, погодите, а значения типа bool
— это разве числа? Да — числа. Можете это проверить, воспользовавшись REPL:
>>> import numbers >>> # Комплексные числа являются наследниками Complex >>> isinstance(1j, numbers. Complex) True >>> # Комплексные числа не являются наследниками Real >>> isinstance(1j, numbers.Real) False >>> # Числа с плавающей точкой являются наследниками Real >>> isinstance(3.14, numbers.Real) True >>> # Числа с плавающей точкой не являются наследниками Rational >>> isinstance(3.14, numbers.Rational) False >>> # Объекты Fractions - это не наследники Rational >>> from fractions import Fraction >>> isinstance(Fraction(1, 2), numbers.Rational) True >>> # Объекты Fractions - это не наследники Integral >>> isinstance(Fraction(1, 2), numbers.Integral) False >>> # Целые числа - это наследники Integral >>> isinstance(1729, numbers.Integral) True >>> # Логические значения - это наследники Integral >>> isinstance(True, numbers.Integral) True >>> True == 1 True >>> False == 0 True
Всё это, на первый взгляд, выглядит вполне нормально. Правда, порядок несколько нарушает то, что значения типа bool
являются числами.
Странность Python: так как тип bool
относится к классу Integral
(на самом деле он — прямой наследник int
), со значениями True
и False
можно вытворять довольно необычные вещи.
Например, True
можно использовать в роли индекса для того чтобы получить второй элемент итерируемого объекта. А если поделить число на False
— будет выдана ошибка ZeroDivisionError
.
Попробуйте выполнить «False»[True]
и 1 / False
в REPL!
Но если присмотреться к числовым типам поближе, окажется, что в иерархии Python-чисел имеется пара своеобразных моментов.
Числа типа Decimal не укладываются в иерархию
Как уже было сказано, в «числовой башне» Python есть 4 конкретных числовых типа, соответствующих четырём абстрактным типам: complex
, float
, Fraction
и int
. Но в Python имеется и пятый числовой тип, представленный классом Decimal
. Этот тип используется для точного представления десятичных чисел и для преодоления ограничений арифметических операций с плавающей точкой.
Можно предположить, что числа типа Decimal
являются наследниками Real
, но это, на самом деле, не так:
>>> from decimal import Decimal >>> import numbers >>> isinstance(Decimal("3.14159"), numbers.Real) False
Единственный класс, наследником которого является класс Decimal
— это Number
:
>>> isinstance(Decimal("3.14159"), numbers.Complex) False >>> isinstance(Decimal("3.14159"), numbers.Rational) False >>> isinstance(Decimal("3.14159"), numbers.Integral) False >>> isinstance(Decimal("3.14159"), numbers.Number) True
Логично то, что класс Decimal
не является наследником Integral
. В некоторой степени смысл есть и в том, что Decimal
не является наследником Rational
. Но почему Decimal
не является наследником Real
или Complex
?
Ответ кроется в исходном коде CPython:
Объекты Decimal обладают всеми методами, определёнными в классе Real, но эти объекты не должны регистрироваться в виде наследников Real, так как Decimal-числа не взаимодействуют с двоичными числами с плавающей точкой (например, результат операции Decimal(‘3.14’) + 2.71828 не определён). Но ожидается, что числа, классы которых являются наследниками абстрактного класса Real, способны взаимодействовать друг с другом (то есть — R1+R2 должно вычисляться в том случае, если числа R1 и R2 представлены типами, являющимися наследниками Real).
Получается, что объяснение странностей сводится к особенностям реализации.
Числа с плавающей точкой — странные создания
А вот числа с плавающей точкой, с другой стороны, реализуют абстрактный базовый класс Real
. Они используются для представления вещественных чисел. Но, из-за того, что компьютерная память не является неограниченным ресурсом, числа с плавающей точкой — это лишь конечные аппроксимации вещественных чисел. Это приводит к возможности написания «ненормальных» образцов кода вроде такого:
>>> 0.1 + 0.1 + 0.1 == 0.3 False
Числа с плавающей точкой хранятся в памяти в виде двоичных дробей. Это приводит к появлению некоторых проблем. Например, у дроби 1/3 нет конечного десятичного представления (после десятичной точки идёт бесконечное множество троек). А у дроби 1/10 нет конечного представления в виде двоичной дроби.
Другими словами, в компьютере нельзя совершенно точно представить число 0,1 — если только этот компьютер не обладает бесконечной памятью.
Со строго математической точки зрения все числа с плавающей точкой — это рациональные числа, за исключением float(«inf»)
и float(«nan»)
. Но программисты используют их в роли аппроксимаций вещественных чисел и воспринимают их, по большей части, как вещественные числа.
Странность Python: float(«nan»)
— это особое значение с плавающей точкой, представляющее собой «не число». Такие значения часто обозначают как NaN
. Но, так как float
— это числовой тип, isinstance(float(«nan»), Number)
возвращает True
.
Получается, что «не числа» — это числа.
В общем, числа с плавающей точкой — странные создания.
№3: набор числовых типов Python можно расширять
Абстрактный числовой базовый тип Python позволяет программисту создавать собственные абстрактные и конкретные числовые типы.
В качестве примера рассмотрим класс ExtendedInteger
, который реализует числа в форме a+b√p, где a
и b
— целые числа, а p
— простое число (обратите внимание: класс не обеспечивает то, что число p
является простым):
import math import numbers class ExtendedInteger(numbers.Real): def init(self, a, b, p = 2) -> None: self. a = a self.b = b self.p = p self._val = a + (b * math.sqrt(p)) def repr(self): return f"{self.class.name}({self.a}, {self.b}, {self.p})" def str(self): return f"{self.a} + {self.b}√{self.p}" def trunc(self): return int(self._val) def float(self): return float(self._val) def hash(self): return hash(float(self._val)) def floor(self): return math.floor(self._val) def ceil(self): return math.ceil(self._val) def round(self, ndigits=None): return round(self._val, ndigits=ndigits) def abs(self): return abs(self._val) def floordiv(self, other): return self._val // other def rfloordiv(self, other): return other // self._val def truediv(self, other): return self._val / other def rtruediv(self, other): return other / self._val def mod(self, other): return self. _val % other def rmod(self, other): return other % self._val def lt(self, other): return self._val < other def le(self, other): return self._val <= other def eq(self, other): return float(self) == float(other) def neg(self): return ExtendedInteger(-self.a, -self.b, self.p) def pos(self): return ExtendedInteger(+self.a, +self.b, self.p) def add(self, other): if isinstance(other, ExtendedInteger): # Если оба экземпляра имеют одно и то же значение p, # вернуть новый экземпляр ExtendedInteger if self.p == other.p: new_a = self.a + other.a new_b = self.b + other.b return ExtendedInteger(new_a, new_b, self.p) # В противном случае вернуть значение типа float else: return self._val + other._val # Если other - значение класса Integral, прибавить значение other к значению self. a elif isinstance(other, numbers.Integral): new_a = self.a + other return ExtendedInteger(new_a, self.b, self.p) # Если other - значение класса Real, вернуть значение типа float elif isinstance(other, numbers.Real): return self._val + other._val # Если тип other неизвестен, позволить другим принять решение # о том, что делать в такой ситуации else: return NotImplemented def radd(self, other): # Сложение коммутативно, поэтому прибегнуть к add return self.add(other) def mul(self, other): if isinstance(other, ExtendedInteger): # Если оба экземпляра имеют одно и то же значение p, # вернуть новый экземпляр ExtendedInteger if self.p == other.p: new_a = (self.a * other.a) + (self.b * other.b * self.p) new_b = (self.a * other.b) + (self.b * other.a) return ExtendedInteger(new_a, new_b, self. p) # в противном случае вернуть значение типа float else: return self._val * other._val # Если other - значение класса Integral, умножить его компоненты a и b на other elif isinstance(other, numbers.Integral): new_a = self.a * other new_b = self.b * other return ExtendedInteger(new_a, new_b, self.p) # Если other - значение класса Real, вернуть значение типа float elif isinstance(other, numbers.Real): return self._val * other # Если тип other неизвестен, позволить другим принять решение # о том, что делать в такой ситуации else: return NotImplemented def rmul(self, other): # Умножение коммутативно, поэтому прибегнуть к mul return self.mul(other) def pow(self, exponent): return self._val ** exponent def rpow(self, base): return base ** self._val
Для того чтобы обеспечить правильность реализации интерфейса Real
конкретным типом — нужно создать реализации множества методов, в именах которых есть два символа подчёркивания. Ещё нужно поразмыслить о том, как методы вроде .add()
и .mul()
взаимодействуют с другими типами, являющимися наследниками Real
.
Обратите внимание: вышеприведённый пример не создавался в расчёте на его полноту или абсолютную правильность. Его цель — продемонстрировать читателю возможности работы с числами.
При наличии реализации ExtendedInteger
можно заниматься следующими вычислениями:
>>> a = ExtendedInteger(1, 2) >>> b = ExtendedInteger(2, 3) >>> a ExtendedInteger(1, 2, 2) >>> # Проверяем то, что a - это наследник Number >>> isinstance(a, numbers.Number) True >>> # Проверяем то, что a - это наследник Real >>> isinstance(a, numbers.Real) True >>> print(a) 1 + 2√2 >>> a * b ExtendedInteger(14, 7, 2) >>> print(a * b) 14 + 7√2 >>> float(a) 3.8284271247461903
Иерархия числовых типов в Python — довольно гибкая структура. Но, конечно, всегда стоит очень внимательно относиться к реализации типов, являющихся наследниками встроенных абстрактных базовых типов Python. Нужно обеспечить их корректную работу друг с другом.
В документации по Python можно найти несколько советов по реализации собственных типов, которые стоит прочесть тому, кто решит заняться созданием собственных числовых типов. Такому человеку ещё полезно будет ознакомиться с реализацией Fraction
.
Итоги
Вот — те три особенности Python-чисел, которые мы здесь обсуждали:
У чисел есть методы, как и у практически всех остальных объектов в Python.
Числа обладают иерархией, даже несмотря на то, что их чёткие взаимоотношения несколько портит наличие типов
Decimal
иfloat
.Программисты могут создавать собственные числовые типы, которые вписываются в иерархию числовых типов Python.
Может быть, вы узнали из этого материала не только об этих особенностях чисел, но и ещё о чём-нибудь, что вам пригодится.
О, а приходите к нам работать? 😏Мы в wunderfund.io занимаемся высокочастотной алготорговлей с 2014 года. Высокочастотная торговля — это непрерывное соревнование лучших программистов и математиков всего мира. Присоединившись к нам, вы станете частью этой увлекательной схватки.
Мы предлагаем интересные и сложные задачи по анализу данных и low latency разработке для увлеченных исследователей и программистов. Гибкий график и никакой бюрократии, решения быстро принимаются и воплощаются в жизнь.
Сейчас мы ищем плюсовиков, питонистов, дата-инженеров и мл-рисерчеров.
Присоединяйтесь к нашей команде.
Преобразование строк в числа и чисел в строки в Python
Введение
Python позволяет взаимозаменяемо преобразовывать строки, целые числа и числа с плавающей запятой несколькими различными способами. Самый простой способ сделать это — использовать базовые функции str()
, int()
и float()
. Помимо этого, есть еще несколько способов.
Прежде чем мы перейдем к преобразованию строк в числа и преобразованию чисел в строки, давайте сначала посмотрим, как строки и числа представлены в Python.
Примечание . Для простоты запуска и демонстрации этих примеров мы будем использовать интерпретатор Python.
Строки
Строковые литералы в Python объявляются путем заключения символа в двойные («) или одинарные кавычки (‘). Строки в Python на самом деле представляют собой просто массивы с Unicode для каждого символа в качестве элемента массива, что позволяет вам использовать индексы для доступа к одному символу из строки
Например, мы можем получить доступ к отдельным символам этих строк, указав индекс:
>>> stringFirst = "Привет, мир!" >>> stringSecond = 'Снова!' >>> строкаFirst[3] 'л' >>> строкаВторая[3] 'я'
Числа
Число в Python может быть целым числом
, числом с плавающей запятой
или комплексом
.
Целые числа могут быть положительными или отрицательными целыми числами. Начиная с Python 3 целые числа не ограничены и могут содержать практически любое число. До Python 3 верхняя граница была 2 31 -1 для 32-разрядных сред выполнения и 2 63 -1 для 64-разрядных сред выполнения.
Число с плавающей запятой также имеет неограниченную длину, но число с плавающей запятой должно содержать десятичную точку .
Комплексные числа должны иметь мнимую часть, которая обозначается с помощью j
:
>>> integerFirst = 23 >>> floatFirst = 23,23 >>> комплексtFirst = 1 + 23j
Преобразование строк в числа
Использование функции
int() Если вы хотите преобразовать строку в целое число, проще всего будет использовать int()
функция. Просто передайте строку в качестве аргумента:
>>> x = "23" >>> у = "20" >>> z = int(x) - int(y) >>> г 3
Это работает, как и ожидалось, когда вы передаете строковое представление целого числа в int()
, но вы столкнетесь с проблемой, если передаваемая вами строка не содержит целочисленного значения. Если в вашей строке есть какие-либо нечисловые символы, то int()
вызовет исключение:
>>> x = "23a" >>> г = интервал (х) Traceback (последний последний вызов): Файл "", строка 1, в ValueError: неверный литерал для int() с основанием 10: '23a'
Это же исключение будет вызвано даже в том случае, если будет передана допустимая строка с плавающей запятой:
>>> x = "23.4" >>> г = интервал (х) Traceback (последний последний вызов): Файл "", строка 1, в ValueError: неверный литерал для int() с основанием 10: '23,4'
Функция int()
имеет еще одну полезную функцию, помимо простого преобразования строк в целые числа, она также позволяет преобразовывать числа из любого основания в целое число с основанием 10. Например, мы можем преобразовать следующую двоичную строку в целое число с основанием 10, используя база
параметр:
>>> int('1101100', base=2) 108
То же самое можно сделать для любого другого основания, например шестнадцатеричного (основание 16):
>>> int('6C', base=16) 108
Использование функции
float() Преобразование строковых литералов в числа с плавающей запятой выполняется с помощью функции float()
:
>>> x = "23. 23" >>> г = "23.00" >>> z = число с плавающей запятой (х) - число с плавающей запятой (у) >>> г 0,23000000000000043
Обратите внимание, что результирующее значение не совсем точное, так как должно быть просто 0,23
. Это связано с проблемами математики с плавающей запятой, а не с преобразованием строки в число.
Функция float()
предлагает немного большую гибкость, чем функция int()
, поскольку она может анализировать и преобразовывать как целые числа с плавающей запятой , так и :
>>> x = "23" >>> у = "20" >>> z = число с плавающей запятой (х) - число с плавающей запятой (у) >>> г 3.0
В отличие от int()
, float()
не вызывает исключение, когда получает числовое значение, отличное от числа с плавающей запятой.
Однако вызовет исключение , если ему будет передано нечисловое значение:
>>> x = "23a" >>> г = число с плавающей запятой (х) Traceback (последний последний вызов): Файл "", строка 1, в ValueError: не удалось преобразовать строку в число с плавающей запятой: «23a»
В то время как float()
имеет ли , а не возможность преобразовывать неосновные 10 числа, такие как int()
делает, it делает имеет возможность преобразовывать числа, представленные в экспоненциальной нотации (также известной как электронная нотация):
>>> float('23e-5') 0,00023 >>> с плавающей запятой('23e2') 2300,0
Использование функции
complex() Преобразование строковых литералов в комплексные числа выполняется с помощью функции complex()
. Для этого строка должна иметь определенное форматирование. В частности, он должен быть отформатирован без пробелов вокруг +
или -
операторы:
>>> x = "5+3j" >>> у = "3+1j" >>> z = комплекс(х) + комплекс(у) >>> г (8+4к)
Дополнительные пробелы между операторами +
или -
приведут к возникновению исключения:
>>> z = complex("5+ 3j") Traceback (последний последний вызов): Файл "", строка 1, в ValueError: аргумент complex() является неверно сформированной строкой
Как 9Функция 0005 float() , complex()
также более расслаблена в допускаемых типах чисел. Например, мнимая часть числа может быть полностью опущена, а также могут быть проанализированы как целые числа, так и числа с плавающей запятой:
>>> complex("1") (1+0j) >>> сложный("1.2") (1,2+0к)
Однако, как видите, это не следует использовать в качестве более гибкой замены int
/ float
, поскольку оно автоматически добавляет мнимую часть числа к строковой версии.
Преобразование числовых значений в строки
Использование функции
str() Функцию str()
можно использовать для преобразования любого числового типа в строку.
Функция str()
доступна в Python 3.0+, поскольку строки в Python 3.0+ по умолчанию имеют кодировку Unicode. Однако это неверно для версий Python ниже 3.0, в которых для достижения той же цели используется функция unicode()
:
>>> str(23) # Integer to String '23' >>> str(23.3) # Плавающая в строку «23,3» >>> str(5+4j) # Из комплекса в строку '(5+4j)'
Преимущество str()
заключается в том, что он может обрабатывать преобразование любого типа числа в строку, поэтому вам не нужно беспокоиться о выборе правильного метода в зависимости от того, какой тип числа вы конвертируете.
Использование функции
format() Другим способом преобразования числовых значений в строки является использование функции format()
, которая позволяет вам устанавливать заполнители внутри строки, а затем преобразовывать другой тип данных в строку и заполнять заполнители.
Чтобы использовать функцию, просто напишите строку, за которой следует .format()
и передайте аргументы для заполнителей.
Вот пример:
>>> "Мой возраст {}".format(21) «Мне 21 год»
К аргументам в функции .format()
также можно обращаться по отдельности, используя их позиции или имена переменных:
>>> "Вы получаете {продукт}, когда вы умножаете {1} на {0}". формат(5,5, 3, произведение=16,5) «Вы получите 16,5, если умножите 3 на 5,5».
Обратите внимание, что под капотом функция .format()
просто использует str()
для преобразования аргументов в строки. По сути, это тот же способ преобразования чисел в строки, что и в предыдущем разделе, но .format()
действует как удобная функция для форматирования строки.
Заключение
Python позволяет взаимозаменяемо преобразовывать строки, целые числа и числа с плавающей запятой несколькими различными способами. Самый простой способ сделать это — использовать основные str()
, int()
и float()
функций. Помимо этого, есть еще несколько способов, таких как функция format()
. Просто имейте в виду, что функции int()
, float()
и complex()
имеют свои ограничения и могут вызывать исключения, если входная строка не отформатирована точно так, как они ожидают.
Преобразование строки в целое число в Python
В этом руководстве мы покажем вам, как можно преобразовать строку в целое число в Python.
Python динамически присваивает тип переменной при ее назначении. Чтобы изменить тип переменной, вам нужно будет полагаться на встроенные функции.
Функция, которая позволяет нам преобразовать строку в целое число с помощью Python, — это функция « int()
». Функция int по умолчанию преобразует число, используя «10-ю базу». Основание 10 — это то, на чем построена десятичная система.
В отличие от преобразования целого числа в строку в Python, есть только одна функция, которая может оказаться полезной.
В следующем разделе мы покажем вам, как можно использовать функцию « int()
» для преобразования строки в целое число. Мы покажем вам различные случаи, включая обработку восьмеричных, шестнадцатеричных и двоичных чисел.
Содержание
- Использование int() для преобразования строки в целое число в Python
- Преобразование строки в целое число в Python с использованием десятичной системы счисления
- Пример преобразования строки в целое число с использованием десятичной системы
- Использование Python для преобразования строки в целое число с использованием шестнадцатеричной системы счисления
- Первый метод — использование основания 16 для преобразования шестнадцатеричного числа в целое число
- Пример преобразования шестнадцатеричного числа в целое число с использованием метода основания 16 Два — использование базы 0 для преобразования шестнадцатеричной строки в целое число
- Пример преобразования шестнадцатеричной строки в целое число с использованием базы 0
- Пример преобразования шестнадцатеричного числа в целое число с использованием метода основания 16 Два — использование базы 0 для преобразования шестнадцатеричной строки в целое число
- Преобразование двоичной строки в целое число с помощью Python
- Первый метод — преобразование двоичного числа в целое с использованием основания 2
- Пример использования основания 2 для преобразования двоичного числа в целое
- Второй метод — преобразование двоичного числа в целое с использованием основания 0 Целое число с использованием базы 0
- Первый метод — преобразование двоичного числа в целое с использованием основания 2
- Первый метод — использование основания 16 для преобразования шестнадцатеричного числа в целое число
- Использование Python для преобразования восьмеричной строки в целое число с использованием Python
- Метод первый — преобразование восьмеричной строки в целое число с использованием базы 8
- Пример преобразования восьмеричной строки в целое число с использованием базы 8
- Второй метод — Преобразование восьмеричного числа в целое по основанию 0
- Пример преобразования восьмеричного числа в целое по основанию 0
- Метод первый — преобразование восьмеричной строки в целое число с использованием базы 8
- Заключение
Преобразование целого числа в целое число () в Python
Основным способом преобразования строки в целое число в Python является использование встроенной функции.
Функция, которую мы используем для этого урока, называется « int()
». Он преобразует любую строку в целое число, по умолчанию используя основание 10.
Ниже вы можете увидеть синтаксис функции « int()
». Мы покажем вам, как использовать эту функцию в следующих нескольких разделах.
Первый параметр ( STRING
) является обязательным, и в нем вы будете ссылаться на свою строку напрямую или через переменную.
Второй параметр ( BASE
) является необязательным, именно здесь вы определяете базу. Вам нужно будет настроить основание, если вы имеете дело с числом, которое не является десятичным (основание 10).
Преобразование строки в целое число в Python с использованием десятичной системы счисления
В этом примере мы покажем вам самый простой способ преобразования строки в целое число с помощью Python.
С десятичным числом вам не нужно беспокоиться об изменении основания, чтобы использовать следующий синтаксис.
Если вы не укажете основание, функция int()
будет считать, что преобразуемая строка использует основание 10 (десятичное).
Ниже мы напишем быстрый Python-скрипт, демонстрирующий эту функциональность.
Пример преобразования строки в целое число с использованием десятичной системы счисления
Начните с создания строки, заключив число 145
в двойные кавычки ( " "
). Затем мы присвоим это значение нашей переменной с именем « x
».
Используя « print()
» и « type()
», мы можем убедиться, что это действительно строка, прежде чем продолжить.
Наконец, мы можем использовать функцию Python « int()
» для преобразования нашего « x
” переменная из строки в целое число. Наконец, мы сохраняем результат функции « int()
» в нашу переменную « y
».
Мы проверяем, что наша переменная « y
» теперь является целым числом, распечатывая ее тип.
Используя этот код, вы увидите, как функция « int()
» легко предоставляет нам целое число.
Использование Python для преобразования строки в целое число с использованием шестнадцатеричной системы счисления
В этом разделе показано, как можно преобразовать строку, содержащую шестнадцатеричное число, в целое число.
Есть два способа добиться этого с помощью функции int. Оба ожидают передачи разных типов строк.
Первый метод — использование базы 16 для преобразования шестнадцатеричного числа в целое
Первый метод устанавливает базовое значение функции int()
в 16
(шестнадцатеричное). Помните, что второй параметр функции позволяет вам установить базовое число.
Этот метод лучше всего подходит, если вы ожидаете, что ваша строка всегда содержит шестнадцатеричное число. Он принимает шестнадцатеричный формат в формате «9».0005 0x2fcfb47b » или « 2fcfb47b
».
Ниже вы можете увидеть синтаксис использования функции « int()
» с основанием 16.
Пример преобразования шестнадцатеричного числа в целое с использованием основания 16 установка базы 16 для функции int Pythons работает.
Мы создадим две переменные: одну с именем « x
» с шестнадцатеричной строкой « 0x2fcfb47b
» и « y
» с « 2fcfb47b
».
Для каждой из наших строк мы используем функцию Python « int()
», чтобы преобразовать их из строки в целое число.
Установив базу на 16
, функция « int
» сможет преобразовать наше шестнадцатеричное число в число, которое мы можем сохранить в нашем целом.
Мы используем функцию Python « print ()
», чтобы мы могли видеть преобразованные значения после того, как функция int преобразовала наши строки в целое число.
Установив базу на 16
, вы можете видеть, как функция int успешно обработала обе наши строки. Даже если в шестнадцатеричной строке отсутствует идентификатор « 0x
».
Второй метод — использование базы 0 для преобразования шестнадцатеричной строки в целое число
В качестве альтернативы, если ваши шестнадцатеричные строки всегда имеют префикс « 0x
», вы можете установить базу 0
.
Если основание равно 0, функция « int()
» попытается вычислить правильное основание для самого числа.
Без « 0x
» в начале вашего номера функция int не может определить, что это шестнадцатеричное число.
Ниже вы можете увидеть, как написать функцию « int()
» при установке базы в 0.
Этот метод полезен, когда вы знаете, как будут форматироваться числа, и вам может понадобиться иметь дело со строками, содержащими другие значения. виды чисел.
Пример преобразования шестнадцатеричного числа в целое с использованием базы 0
В этом примере мы будем использовать те же данные, что и для первого метода. Это покажет, как использовать основание 0 с « 9Функция 0005 int() автоматически преобразует шестнадцатеричную строку, если перед ней стоит префикс « 0x
».
Начните с переменной « x
» и присвойте ей значение « 0x2fcfb47b
». Затем создайте переменную « y
» и присвойте ей значение « 2fcfb47b
».
Затем мы используем функцию « int()
» для обеих этих переменных, чтобы преобразовать строки в целые числа. На этот раз мы используем базу 0
.
Запустив этот код, вы увидите нашу строку с префиксом «9».0005 0x » было преобразовано из строки в целое число.
Однако другая наша строка выдавала ошибку при выполнении функции « int()
», поскольку ей не удалось определить тип данных.
Преобразование двоичной строки в целое число с помощью Python
Вы также можете преобразовать строку, содержащую двоичное число, в Python. Мы достигаем этого, установив базу « 2
» или с помощью форматированной строки, вы даже можете использовать базу, установленную на « 0
».
Метод первый — Преобразование двоичного числа в целое с использованием базы 2
Установив основание равным 2, функция « int()
» преобразует ваше число из двоичной строки в число. Убедитесь, что ваш номер использует формат « 010101
» или « 0b010101
».
Использование функции « int()
» для преобразования ваших строк полезно, когда вы знаете, что она всегда будет содержать двоичное число.
Пример использования базы 2 для преобразования двоичного числа в целое
В этом примере мы создадим две переменные, одну с именем « x
» со значением « 0b010101
», а другую с именем « y
» со значением « 010101
».
Затем мы используем функцию « int()
», установив базовое значение 2
. Он преобразует обе наши двоичные строки в их целочисленные значения.
Ниже вы можете увидеть результат выполнения приведенного выше кода. Вы можете видеть, используя base 2
, Python « int()
» преобразовала каждую строку в целое число.
Метод второй — преобразование двоичного числа в целое с использованием основания 0
Как и в случае с шестнадцатеричными числами, если вы добавляете префикс « 0b
», вы можете использовать функцию « int()
» с основанием 0
.
Функция « int()
» использует этот префикс для определения способа преобразования числа.
Пример преобразования двоичного числа в целое с использованием базы 0
Мы начинаем этот пример с двух двоичных строк. Один с префиксом « 0b
», а другой без.
Вы увидите, как установка базы на 0
позволит « int()
» преобразовать строку с префиксом « 0b
» и выдать ошибку при ее отсутствии.
После запуска вы увидите, что функция « int()
» легко обработала строку, начинающуюся с « 0b
». Но выдало ошибку с отсутствующим идентификатором.
Использование Python для преобразования восьмеричной строки в целое число с помощью Python
В последнем разделе, посвященном преобразованию строки в целое число в Python, мы рассмотрим работу с восьмеричными строками.
Как и в других системах счисления, которые мы исследовали, мы покажем два метода, которые вы можете использовать.
Первый метод — преобразование восьмеричной строки в целое число с использованием основания 8
Этот первый метод позволяет функции « int()
» преобразовать восьмеричную строку в целое число независимо от формата. Мы достигаем этого, установив «базу» на 8
.
По сути, это позволяет использовать восьмеричную строку в формате « 127
» или « 0o127
» и преобразовывать ее в целое число.
Пример преобразования восьмеричного числа в целое с использованием базы 8
В этом примере мы будем использовать две переменные, одну с именем « x
» со значением « 0o127
», а другую с именем « y
» с значение « 127
».
Оба они содержат одно и то же восьмеричное число. « 0o
” идентифицирует число в этой строке как восьмеричное.
Мы преобразуем оба этих числа из восьмеричной строки в целое число, используя функцию Python « int()
».
Если вы запустите эти строки в интерпретаторе Python, вы получите следующий результат. Обе строки были легко преобразованы из их восьмеричного значения в целое число.
Второй метод — преобразование восьмеричного числа в целое с использованием основания 0
Второй метод подразумевает использование « int()
» с базой, установленной на « 0
».
Это требует, чтобы ваша строка имела префикс « 0o
», но позволяет функции « int()
» также обрабатывать любую другую отформатированную числовую строку.
Пример преобразования восьмеричного числа в целое с использованием базы 0
В этом примере мы используем те же переменные, что и в первом методе. Это означает переменную с именем « x
» со значением « 0o127
» и переменную с именем « y
» со значением «9».0005 127 ».
Этот пример отличается тем, что мы будем использовать базу 0
при использовании функции « int()
». При установленной базе 0
функция « int()
» сможет преобразовать только нашу строку, содержащую префикс « 0o
».
При выполнении этого кода первая строка успешно преобразуется из восьмеричного в целое число.
Однако, несмотря на то, что второй формат все равно будет преобразован, Python будет считать, что он использует десятичный формат. Таким образом, второе значение будет напечатано как « 127
» вместо « 87
».
Заключение
В этом руководстве мы показали вам, как можно преобразовать строку в целое число в Python.
Поскольку строка потенциально может содержать различные числовые форматы, мы рассмотрели несколько наиболее полезных из них. Однако, изменив базовое значение, вы сможете обрабатывать любое требуемое число.
Если у вас возникли проблемы с пониманием того, как преобразовать строку в целое число, пожалуйста, прокомментируйте ниже.
Чтобы узнать больше о Python, обязательно ознакомьтесь со многими другими нашими руководствами по Python.
python — Как преобразовать все строки в списке списков в целые числа?
Спросил
Изменено 1 месяц назад
Просмотрено 1,7 млн раз
У меня есть набор кортежей, содержащих строки:
T1 = (('13', '17', '18', '21', '32'), («07», «11», «13», «14», «28»), («01», «05», «06», «08», «15», «16»))
Я хочу преобразовать все элементы строки в целые числа и вернуть их в список списков:
T2 = [[13, 17, 18, 21, 32], [7, 11, 13, 14, 28], [1, 5, 6, 8, 15, 16]]
Связанный:
- Преобразование
str -> int
- Преобразовать
список[str] -> список[int]
- питон
- строка
- целое число
0
целое()
— это стандартная встроенная функция Python для преобразования строки в целочисленное значение. Вы вызываете его со строкой, содержащей число в качестве аргумента, и оно возвращает число, преобразованное в целое число:
>>> int("1") + 1 2
Если вы знаете структуру своего списка T1 (что он просто содержит списки только одного уровня), вы можете сделать это в Python 3:
T2 = [list(map(int, x)) for x in T1 ]
В Python 2:
T2 = [map(int, x) для x в T1]
5
Вы можете сделать это с помощью понимания списка:
T2 = [[int(column) для столбца в строке] для строки в T1]
Внутреннее понимание списка ( [int(column) for column in row]
) строит list
из int
s из последовательности int
объектов, таких как десятичные строки, в строке
. Понимание внешнего списка ( [... для строки в T1])
) создает список результатов понимания внутреннего списка, примененного к каждому элементу в Т1
.
Фрагмент кода завершится ошибкой, если какая-либо из строк содержит объекты, которые нельзя преобразовать с помощью int
. Вам понадобится более умная функция, если вы хотите обрабатывать строки, содержащие недесятичные строки.
Если вы знаете структуру строк, вы можете заменить понимание внутреннего списка вызовом функции строки. Например.
T2 = [parse_a_row_of_T1(строка) для строки в T1]
Использование только списков:
[[int(y) для y в x] для x в T1]
Вместо int()
введите float()
, что позволит вам использовать десятичные дроби вместе с целыми числами.
1
Пока я согласен со всеми ответами, но проблема в том, что если у вас нет всех целых чисел, они вылетят.
Если вы хотите исключить нецелые числа, то
T1 = (('13', '17', '18', '21', '32'), («07», «11», «13», «14», «28»), («01», «05», «06», «08», «15», «16»)) new_list = list(list(int(a) для a в b) для b в T1, если a. isdigit())
Это дает только фактические цифры. Причина, по которой я не использую прямое понимание списка, заключается в том, что понимание списка пропускает их внутренние переменные.
1
Попробуйте это.
х = "1"
x — это строка, потому что она заключена в кавычки, но в ней есть число.
х = целое (х)
Поскольку x содержит число 1, я могу преобразовать его в целое число.
Чтобы узнать, является ли строка числом, вы можете сделать это.
по определению is_number(var): пытаться: если вар == int(вар): вернуть Истина кроме исключения: вернуть ложь х = "1" у = "тест" x_test = is_number(x) печать (x_test)
Должно быть выведено IDLE True, так как x — это число.
y_test = is_number(y) печать (у_тест)
Должно быть выведено IDLE False, поскольку y не является числом.
2
Т3=[] для i в диапазоне (0, len (T1)): T3. добавлять([]) для j в диапазоне (0, len (T1 [i])): б = целое число (Т1 [я] [j]) T3[i].append(b) распечатать Т3
1
Использование списков:
t2 = [map(int, list(l)) for l in t1]
1
См. эту функцию
def parse_int(s): пытаться: res = int(eval(str(s))) если тип (res) == int: вернуть разрешение кроме: возвращаться
Затем
val = parse_int('10') # Возврат 10 val = parse_int('0') # Возвращает 0 val = parse_int('10.5') # Возврат 10 val = parse_int('0.0') # Возвращает 0 val = parse_int('Десять') # Возвращать ничего
Вы также можете проверить
, если val == None: # True, если входное значение не может быть преобразовано pass # Примечание: не используйте 'if not val:'
1
Еще одно функциональное решение для Python 2:
из functools import partial карта (частичная (карта, интервал), T1)
Python 3 будет немного запутанным:
list(map(list, map(partial(map, int), T1)))
мы можем исправить это с помощью обертки
def oldmap(f, iterable): список возврата (карта (f, итерируемый)) старая карта (частичная (старая карта, целое число), T1)
В Python 3. 5.1 работают такие вещи:
c = input('Введите число:') напечатать (целое (с плавающей запятой (с))) напечатать (круглый (с плавающей запятой (с)))
и
Введите число: 4.7 4 5
Если это всего лишь кортеж кортежей, что-то вроде rows=[map(int, row) for row in rows]
поможет. (Там есть понимание списка и вызов map(f, lst), который равен [f(a) for a in lst].)
Eval — это , а не , что вы хотите сделать, если по какой-то причине в вашей базе данных есть что-то вроде __import__("os").unlink("importantsystemfile")
.
Всегда проверяйте свой ввод (если ни с чем другим, исключение int() возникнет, если у вас неверный ввод).
Python имеет встроенную функцию int(string) и необязательную базу параметров.
, если ваша строка содержит целочисленное значение, она преобразует его в соответствующее целочисленное значение. Однако, если у вас есть десятичное число в виде строки, вам понадобится float() для его преобразования.