Как преобразовать строку в число в Python
При написании кода нам довольно часто приходится переходить с одного типа данных на другой. Поэтому возможность конвертировать типы данных очень важна. Она дает нам большую гибкость при работе с информацией и в написании эффективно и корректно работающего кода.
В Python есть различные встроенные способы преобразования типов. Мы уже разбирали, как преобразовать строку в число с плавающей точкой. В этой статье мы остановимся на том, как преобразовать строку в целое число.
Итак, давайте начнем!
Типы данных в Python
Python поддерживает много типов данных. Они нужны для определения, представления и обработки различных видов данных, которые существуют и используются в компьютерных программах.
Кроме того, с разными типами данных нам доступны разные операции: то, что вы можете сделать с данными одного типа, невозможно сделать с другими. Например, в Python есть строковые методы, которые используются исключительно для работы со строками. К примеру, .lowercase() и .uppercase() для приведения символов строки в нижний и верхний регистр. И таких примеров очень много. Фактически, подавляющее большинство методов подходят только для какого-то одного типа данных.
Одним из типов данных Python являются строки. Строки – это последовательности символов, которые используются для передачи текстовой информации.
Строки заключаются в одинарные или двойные кавычки. К примеру, это может выглядеть следующим образом:
fave_phrase = "Hello world!" # Hello world! - это строка, заключенная в двойные кавычки
Инты или интеджеры (integers) – это целые числа. Они используются для представления числовых данных. Более того, при работе с целыми числами вы можете выполнять любые математические операции (например, сложение, вычитание, умножение или деление).
Кстати если вы ищете работу, то посмотрите свежие вакансии по Python
Целые числа не заключаются в одинарные или двойные кавычки. Они представляются просто в виде последовательности цифр:
fave_number = 7 # 7 имеет тип int, это целое число # "7" было бы не int, а string, несмотря на то, что это цифра # Все дело в кавычках
Преобразование типов данных
Бывает, данные хранятся или получаются от пользователя в неподходящем формате, т.е. тип этих данных не подходит для манипуляций, которые с ними нужно проделать.
Поскольку каждым типом данных можно управлять по-разному, это часто означает, что перед выполнением наших задач нам нужно преобразовать этот тип данных в более подходящий для конкретной задачи.
Преобразование одного типа данных в другой также называется приведением типа или преобразованием типа. Многие языки предлагают встроенные операторы приведения именно для этого – для явного преобразования одного типа в другой.
Давайте, наконец, посмотрим, как же это сделать.
Как преобразовать строку в число (int) в Python
Чтобы преобразовать строку в целое число, можно использовать встроенную функцию int() .
Функция принимает в качестве параметра исходную строку, которую вы хотите преобразовать, и возвращает целочисленный эквивалент переданного вами значения.
Общий синтаксис выглядит примерно следующим образом: int(«str») .
Давайте рассмотрим следующий пример, где необходимое нам число представлено в виде строки:
# цифра 7 в строковом формате print(«7») # проверяем тип данных при помощи метода type() print(type(«7»)) # Результат # 7 #
Чтобы преобразовать строковую версию числа в целочисленный эквивалент, нам нужно воспользоваться функцией int() . К примеру, это можно сделать следующим образом:
# конвертируем string в int print(int(«7»)) # проверяем тип данных при помощи метода type() print(type(int(«7»))) # Результат #7 #
Практический пример преобразования строки в целое число
Допустим, вам необходимо рассчитать возраст пользователя. Вы делаете это на основе полученной от него информации. Данный ввод всегда будет идти в строковом формате.
То есть, даже если пользователь вводит число, вы получите входящие данные строкового типа ( ).
Если вы захотите выполнить математические операции с этим инпутом, например вычесть введённое значение из другого числа, вы получите сообщение об ошибке, потому что выполнять математические операции со строками нельзя.
Давайте разберем пример, чтобы увидеть, как это происходит в действии:
current_year = 2021 # просим пользователя ввести его год рождения user_birth_year_input = input("What year were you born? ") # вычитаем текущий год из года, введенного пользователем user_age = current_year - user_birth_year_input print(user_age) # Результат # What year were you born? 1993 # Traceback (most recent call last): # File "demo.py", line 9, in # user_age = current_year - user_birth_year_input # TypeError: unsupported operand type(s) for -: 'int' and 'str'
Итак, мы просим пользователя ввести его год рождения, чтобы на основе этой информации узнать его возраст (вычесть введенный год из 2021). В данном примере, для упрощения задачи, мы не учитываем месяц и дату рождения. Здесь главное понять принцип.
Однако запустив наш код, мы получаем ошибку. В ней сказано, что вычитание не может выполняться между целым числом int и строкой.
Давайте проверим тип данных, введенных с помощью метода type() :
current_year = 2021 # просим пользователя ввести его год рождения user_birth_year_input = input(«What year were you born? «) print(type(user_birth_year_input)) # Результат # What year were you born? 1993 #
Действительно, переменная user_birth_year_input является строковой. Всё дело в том, что функция input() , которую мы используем для получения данных от пользователя, всегда возвращает данные строкового типа. Это важно помнить и преобразовывать введенные данные в подходящий для вашей задачи тип.
В нашем примере, чтобы избежать ошибок, нужно преобразовать вводимые пользователем данные в целое число и сохранить его в новой переменной. Сделать это можно следующим образом:
current_year = 2021 # просим пользователя ввести его год рождения user_birth_year_input = input("What year were you born? ") # конвертируем пользовательский input в int при помощи функции int() и сохраняем в новой переменной user_birth_year = int(user_birth_year_input) # вычитаем текущий год из введенного пользователем года user_age = current_year - user_birth_year print(user_age) # Результат # What year were you born? 1993 # 28
Как видите, код отработал корректно, и мы получили возраст пользователя.
Важно отметить, что функция int() выдаст вам ошибку, если исходная строка будет содержать какие-либо ещё символы помимо цифр. Например, если пользователь (по ошибке или специально) введет 19f8 в качестве года рождения, то вы получите ошибку. В таком случае важно прописывать так называемую «защиту от дурака». Это можно сделать с помощью конструкции try except , подробнее про это можно почитать в статье «Обрабатываем исключения в Python: try и except».
Заключение
Вот и все – теперь вы знаете, как преобразовать строку в число в Python! Мы разобрали такой встроенный метод как int() , как он работает и как его использовать для приведения строки к целому числу.
Спасибо за чтение! Надеемся, статья была вам полезна. Успехов в написании кода!
Выделить числа из строки в список
Уточните, по какому принципу, -29 должно отсеиваться как число, а y6a — нет? И как быть с тем, что -29 это тоже число?
29 янв 2021 в 10:20
3 ответа 3
Сортировка: Сброс на вариант по умолчанию
import re t = 'Tny6anxayna = 104 nognucunkos §—-29 noanucok' p = re.compile("(\d*) ") m = p.findall(t) # m = ['', '', '104', '', '29'] ls = [] for i in m: if i != "": ls.append(i) print(ls)
Возможно получится составить регулярку лучше чтобы не цепляла пробелы тогда можно будет убрать лишнюю конструкцию if но побыстрому получился такой вариант.
Отслеживать
ответ дан 29 янв 2021 в 10:40
3,186 2 2 золотых знака 9 9 серебряных знаков 16 16 бронзовых знаков
Чтобы «не цепляло пробелы» пробел можно вынести за скобку
29 янв 2021 в 10:51
@CrazyElf Спасибо поправил так можно убрать ненужный replace. Но имел ввиду пробелы в m после регулярки. P.S. Уже подсмотрел в Вашем ответе.
29 янв 2021 в 10:56
Ну да, лишние пустые строки можно убрать, заменив \d* на \d+
29 янв 2021 в 11:54
Не совсем понял принцип, но видимо так:
import re text = 'Tny6anxayna = 104 nognucunkos §—-29 noanucok' re_digits = re.compile(r"\b\d+\b") print(re_digits.findall(text))
['104', '29']
Отслеживать
ответ дан 29 янв 2021 в 10:50
68k 5 5 золотых знаков 20 20 серебряных знаков 51 51 бронзовый знак
ну как вариант если строка нестандартная — заменить все символы на пробелы, потом сделать split() и выделить числа, правда в этом случае и для 5a7 получится 2 числа
text = 'Tny6anxayna = 104 nognucunkos §—-29 noanucok' text_digits = ''.join(letter for letter in text if letter in ' \t0123456789') print(text_digits.split())
правда тут лишняя 6 из Tny6anxayna вылезает 🙁
Python для анализа данных¶
При программировании на питоне первые полезные результаты начинают получаться минут через 5 после начала работы над проектом. Не надо изобретать никаких велосипедов: всё, что может понадобиться, доступно или в стандартной библиотеке, или в одном из многочисленных дополнительных пакетов. Программы получаются элегантные и лаконичные, их легко и приятно писать и читать. Имеется широкий выбор высококачественных инструментов программиста: интегрированные среды разработки, отладчики и средства тестирования и т.д. Питон прекрасно приспособлен для написания больших и сложных программных комплексов. И всё это совершенно не зависит от железа и операционной системы. Конечно, если не вызывать низкоуровневых системно-зависимыех библиотек. Главный минус — питон, мягко говоря, не славится потрясающим быстродействием. Писать программы сложных вычислений на питоне, конечно, глупо. Но есть ряд способов обойти это ограничение. Если программа занимается регулярной обработкой больших массивов чисел с плавающей точкой, то использование numpy радикально повышает её быстродействие. Пакет numpy и его расширение scipy фактически делают matlab ненужным — дают ту же функциональность с более приятным языком программирование. Есть ряд пакетов для построения высококачественных графиков, например, matplotlib . Другое средство повышения быстродействия — cython . Пишется программа, выглядящая почти как питонская, но со вставленными статичестими декларациями типов. cython транслирует её в исходный код на C, что часто даёт быстродействие, сравнимое с вручную написанным C. Программа на cython -е может свободно вызывать функции из библиотек на C; её можно использовать из обычного питона. Ну и наконец можно написать критически важные для быстродействия системы в целом вычисления на другом языке (C например), и вызывать эти внешние программы из питона. Питон при этом выполняет роль клея — реализует логику высокого уровня, системно-независимый GUI и т.д. Питон — сильно типизированный язык с динамической типизацией. Всё, с чем работает программа — объекты; каждый из них принадлежит определённому типу. Если программа пытается выполнить какую-то операцию над объектом такого типа, который не поддерживает эту операцию, произойдёт ошибка времени выполнения. Описаний переменных в питоне нет. Одна и та же переменная может в разные моменты иметь значения — объекты разных типов. Ошибка в типах может проявиться много времени спустя после того, как программа сдана в эксплуатацию, особенно если она происходит в редко используемом участке кода. Язык допускает ситуацию, когда мы сначала присвоим какой-то переменной целое число, потом строку, потом ещё что-то, но это плохой стиль. Переменная заводится для одного конкретного использования, и естественно, чтобы её значения в любой момент подходили для этого использования и имели одинаковый тип. В исходный текст на питоне 3.5 можно включить (необязательные) аннотации типов переменных и функций, и прогнать её через программу статической проверки типов.
Питонячий стиль кода¶
- Отступы составляют ровно 4 пробела, табуляции не используются. К слову, в Питоне нет ключевых слов по типу < и >в C и begin и end в Паскале. Блоки кода разделяются пробелами.
- Все переменные должны иметь понятные названия и состоять только из строчных букв. Например, вместо того, чтобы назвать выборку как X , лучше назвать ее sample . В качестве разделителей используйте подчеркивания. В редких случаях можно и отступать от этого правила, если обозначения понятны из решаемой задачи.
- Вокруг всех знаков арифметических операций, присваивания и пр. обязательны пробелы с двух сторон. Исключение — запись вида a=b в аргументах функции. Примеры будут далее.
- Разделяйте логические куски программы пустыми строками. Врядли вы сможете написать код строк на 10-15, в который нельзя вставить ни одну пустую строку, разделяющую код на логические части. ПЕРЕД всеми логическими кусками кода должен быть комментарий к этому куску кода.
- Все функции (кроме самых маленьких) должны содержать подробную документацию, написанную по правилам оформления документаций.
- Если комментарий дается на строке с кодом, то оформить его стоит так:
код [ровно 2 пробела] # [ровно 1 пробел] комментарий
- Если комментарий дается на отдельной строке, то он должен иметь тот же отступ, что и строка кода под ним. Скорее всего перед таким комментарием можно вставить пустую строку.
- Не нужно комментировать очевидное.
- Не нужно писать весь код в одной ячейке ноутбука.
- Если есть возможность, при выводе десятичных чисел следует оставлять разумное число знаков после запятой.
Отдельно стоит отметить, что код должен быть понятен проверяющему. В частности, должны использоваться понятные названия переменных и присутствовать подробные комментарии. Если проверяющий не поймет код, оценка за задание может быть снижена, и будет пичалька.
2. Числа¶
Арифметические операции имеют ожидаемые приоритеты. При необходимости используются скобки.
Как вывести последнее слово в строке Python
Для программистов, работающих с текстом, часто возникает задача извлечения определенных частей из строки. Одной из таких задач является нахождение последнего слова в строке. В этой статье мы рассмотрим несколько методов, которые позволят нам решить эту задачу в Python.
Для того чтобы вывести последнее слово в строке, необходимо:
- Разделить строку на слова с помощью метода split()
- Использовать отрицательные индексы и получить последнее слов
Разделение строки на слова
Использование функции split() — это один из наиболее простых и эффективных способов разделения строки на список слов. Функция split() позволяет разделить строку на подстроки, используя разделитель, который мы можем задать в качестве аргумента функции. Если разделитель не указан, по умолчанию используется пробел.
Вот пример использования метода split() :
text = "Пример разделения строки на слова" words = text.split() print(words)
Результат выполнения кода:
['Пример', 'разделения', 'строки', 'на', 'слова']
Как видно из примера, метод split() возвращает список из отдельных слов в строке. Каждый элемент списка представляет собой одно слово.
Затем можно использовать индексацию списков Python, чтобы получить последнее слово из списка.
Использование отрицательных индексов для получения последнего слова
В Python индексы используются для доступа к элементам списка, кортежа или строки. Как правило, индексы начинаются с нуля, то есть первый элемент имеет индекс 0, второй элемент имеет индекс 1 и так далее.
Но помимо положительных индексов, которые начинаются с 0, в Python также используются обратные индексы. Обратные индексы начинаются с -1, то есть последний элемент имеет индекс -1, предпоследний элемент имеет индекс -2 и так далее.
Используем функцию split() и отрицательный индекс -1 для нахождения последнего слова в строке:
my_string = "Это пример строки с несколькими словами" words_list = my_string.split() # Разбить строку на список слов last_word = words_list[-1] # Получить последнее слово из списка с помощью индекса -1 print(last_word) # Вывод "словами"
Здесь мы сначала объявляем строку my_string , содержащую несколько слов. Затем мы используем метод split() для разбиения этой строки на список слов words_list . Наконец, мы получаем последнее слово, используя индекс -1 и сохраняем его в переменной last_word .
В конце мы выводим последнее слово на экран с помощью функции print() .
