Этот ответ содержит пошаговое руководство, содержащее функцию с примерами для поиска строки:
- Положительное целое число
- Положительный / отрицательный - целое число / число с плавающей запятой
- Как отбросить строки "NaN" (не число) при проверке числа?
Проверьте, является ли строка положительным целым числом
Вы можете использовать str.isdigit()
, чтобы проверить, является ли данная строка положительным целым числом.
Пример результатов:
# For digit
>>> '1'.isdigit()
True
>>> '1'.isalpha()
False
Проверить строку как положительную / отрицательную - целое число / число с плавающей запятой
str.isdigit()
возвращает False
, если строка представляет собой отрицательное число или число с плавающей запятой. Например:
# returns `False` for float
>>> '123.3'.isdigit()
False
# returns `False` for negative number
>>> '-123'.isdigit()
False
Если вы хотите также проверить наличие отрицательных целых чисел и float
, то вы можете написать собственную функцию для проверки:
def is_number(n):
try:
float(n) # Type-casting the string to `float`.
# If string is not a valid `float`,
# it'll raise `ValueError` exception
except ValueError:
return False
return True
Пробный прогон:
>>> is_number('123') # positive integer number
True
>>> is_number('123.4') # positive float number
True
>>> is_number('-123') # negative integer number
True
>>> is_number('-123.4') # negative `float` number
True
>>> is_number('abc') # `False` for "some random" string
False
Сбрасывать строки "NaN" (не число) при проверке числа
Вышеуказанные функции будут возвращать True
для строки "NAN" (не число), потому что для Python это допустимое число с плавающей точкой, представляющее, что это не число. Например:
>>> is_number('NaN')
True
Чтобы проверить, является ли число «NaN», вы можете использовать math.isnan()
как:
>>> import math
>>> nan_num = float('nan')
>>> math.isnan(nan_num)
True
Или, если вы не хотите импортировать дополнительную библиотеку, чтобы проверить это, вы можете просто проверить ее, сравнив ее с самой собой, используя ==
. Python возвращает False
, когда nan
float сравнивается с самим собой. Например:
# `nan_num` variable is taken from above example
>>> nan_num == nan_num
False
Следовательно, выше функция is_number
может быть обновлена для возврата False
для "NaN"
как:
def is_number(n):
is_number = True
try:
num = float(n)
# check for "nan" floats
is_number = num == num # or use `math.isnan(num)`
except ValueError:
is_number = False
return is_number
Пробный прогон:
>>> is_number('Nan') # not a number "Nan" string
False
>>> is_number('nan') # not a number string "nan" with all lower cased
False
>>> is_number('123') # positive integer
True
>>> is_number('-123') # negative integer
True
>>> is_number('-1.12') # negative `float`
True
>>> is_number('abc') # "some random" string
False
PS: Каждая операция для каждой проверки в зависимости от типа номера сопровождается дополнительными издержками. Выберите версию функции is_number
, которая соответствует вашим требованиям.