Проверка на число
Достаточно часто требуется узнать: записано ли в переменной число. Такая ситуация может возникнуть при обработке введенных пользователем данных. При чтении данных из файла или при обработке полученных данных от другого устройства.
В Python проверка строки на число можно осуществить двумя способами:
- Проверить все символы строки что в них записаны цифры. Обычно используется для этого функция isdigit.
- Попытаться перевести строку в число. В Python это осуществляется с помощью методов float и int. В этом случае обрабатывается возможное исключение.
Рассмотрим как применяются эти способы на практике.
isdigit, isnumeric и isdecimal
У строк есть метод isdigit, который позволяет проверить, являются ли символы, являются ли символы, из которых состоит строка цифрами. С помощью этого метода мы можем проверить, записано ли в строку целое положительное число или нет. Положительное — это потому, что знак минус не будет считаться цифрой и метод вернет значение False.
a = '0251' print(a.isdigit()) True
Если в строка будет пустой, то функция возвратит False.
a = '' print(a.isdigit()) False
Методы строки isnumeric и isdecimal работают аналогично. Различия в этих методах только в обработке специальных символов Unicode. А так как пользователь будет вводить цифры от 0 до 9, а различные символы, например, дробей или римских цифр нас не интересуют, то следует использовать функцию isdigit.
Проверка с помощью исключения
Что же делать, если требуется проверить строку на отрицательное число. В Python с помощью isdigit не удастся определить отрицательное число или число с плавающей точкой. В этом случае есть универсальный и самый надежный способ. Надо привести строку к вещественному числу. Если возникнет исключение, то значит в строке записано не число.
Приведем функцию и пример ее использования:
def is_number(str): try: float(str) return True except ValueError: return False a = '123.456' print(is_number(a)) True
Для целых чисел
Аналогично можно сделать и проверку на целое число:
def is_int(str): try: int(str) return True except ValueError: return False a = '123.456' print(is_int(a)) False
Проверка строки на числовое значение в Python
Часто в ходе работы с Python возникает необходимость проверить, является ли строка числовым значением. Например, при обработке пользовательского ввода или при чтении данных из файла. В этих случаях, данные часто представлены в виде строк и могут содержать числовые значения, записанные как строки.
Рассмотрим пример: есть строка ‘123’ и есть необходимость узнать, является ли это число.
s = '123'
Самый простой и распространенный подход для проверки строки на числовое значение в Python — это использование обработки исключений.
Сначала попытаться преобразовать строку в число с помощью функции float() . Если преобразование прошло успешно, значит строка содержит числовое значение. Если во время преобразования произошла ошибка ValueError , значит строка не является числом.
def is_number(s): try: float(s) return True except ValueError: return False
Однако, этот подход может показаться немного громоздким, особенно для новичков.
Существует другой способ, который использует регулярные выражения.
import re def is_number(s): if re.match("^\d+?\.\d+?$", s) is None: return s.isdigit() return True
В этом примере используется функция re.match() , которая проверяет, соответствует ли строка заданному регулярному выражению. В данном случае проверяется, является ли строка числом с плавающей точкой. Если это не так, то с помощью метода isdigit() проверяется, является ли строка целым числом.
Оба подхода могут быть использованы в зависимости от конкретной ситуации и предпочтений разработчика.
Проверка, является ли строка целым числом в Python без использования try/except
Когда работаешь с данными в Python, часто приходится сталкиваться с ситуацией, когда необходимо проверить, является ли строка целым числом. Это может быть актуально, например, при обработке пользовательского ввода, когда требуется убедиться, что введенные данные соответствуют определенному формату.
Предположим, есть следующие строки:
s1 = '123' s2 = '-456' s3 = '7.89' s4 = 'abcdef'
Необходимо проверить, являются ли эти строки целыми числами. Очевидно, что только s1 и s2 являются целыми числами, в то время как s3 является десятичным числом, а s4 — вообще не числом.
Один из распространенных подходов к решению этой проблемы — использовать конструкцию try/except, однако, она может быть избыточной и не всегда желательной. К счастью, в Python существуют другие способы.
Один из таких способов — использование метода isdigit() , который возвращает True , если строка содержит только цифры. Однако, данный метод не справится с отрицательными числами и числами с плавающей точкой.
print(s1.isdigit()) # True print(s2.isdigit()) # False, потому что есть знак '-' print(s3.isdigit()) # False print(s4.isdigit()) # False
Другой способ — использовать регулярные выражения. В Python для этого есть модуль re . Можно создать шаблон, который будет соответствовать только целым числам, и затем проверять, соответствует ли строка этому шаблону.
import re def is_int(s): return bool(re.match(r'^-?\d+$', s)) print(is_int(s1)) # True print(is_int(s2)) # True print(is_int(s3)) # False print(is_int(s4)) # False
Таким образом, задача проверки, является ли строка целым числом, может быть решена в Python без использования try/except.
Проверить является ли строка числом в Python
К сожалению функция isdigit не работает для чисел с плавающей точкой и для отрицательных чисел. Так что для такой проверки можно использовать следующую функцию, которая представляет собой комбинацию из проверки isdigit и обычного конвертирования во float:
def is_digit(string):
if string.isdigit():
return True
else:
try: float(string) return True except ValueError: return False
>>>print(is_digit('neer'))
False
>>>print(is_digit('neer306'))
False
>>>print(is_digit('306'))
True
>>>print(is_digit('0.05'))
True
>>>print(is_digit('0.05abc'))
False