Python: проверка, является ли переменная числом
В этой статье мы рассмотрим несколько примеров того, как проверить, является ли переменная числом в Python.
Python имеет динамическую типизацию. Нет необходимости объявлять тип переменной во время ее создания - интерпретатор определяет тип во время выполнения:
variable = 4
another_variable = 'hello'
Кроме того, переменную можно переназначить новому типу в любой момент:
# Присвойте числовое значение
variable = 4
# Переназначить строковое значение
variable = 'four'
Этот подход, имея преимущества, также знакомит нас с несколькими проблемами. А именно, когда мы получаем переменную, мы обычно не знаем, какого она типа. Если мы ожидаем число, но получаем неопределенный variable
, мы захотим проверить, является ли он числом, прежде чем выполнять какие-то действия.
Использование функции type()
В Python функция type()
возвращает тип аргумента:
myNumber = 1
print(type(myNumber))
myFloat = 1.0
print(type(myFloat))
myString = 's'
print(type(myString))
Это приводит к:
<class 'int'>
<class 'float'>
<class 'str'>
Таким образом, способ проверки типа:
myVariable = input('Enter a number')
if type(myVariable) == int or type(myVariable) == float:
# Do something
else:
print('The variable is not a number')
Здесь мы проверяем, является ли тип переменной, введенной пользователем, int
или float
, продолжая выполнение программы, если это так. В противном случае мы уведомляем пользователя, что он ввел переменную, отличную от Number. Помните, что если вы сравниваете несколько типов, например int
или float
, вам придется использовать эту type()
функцию оба раза.
Если бы мы просто сказали if type(var) == int or float
, что вроде бы нормально, возникла бы проблема:
myVariable = 'A string'
if type(myVariable) == int or float:
print('The variable a number')
else:
print('The variable is not a number')
Это, независимо от ввода, возвращает:
The variable is a number
Это потому, что Python проверяет значения истинности утверждений. Переменные в Python могут быть оценены как True
за исключением False
, None
, 0
и пустых []
, {}
, set()
, ()
, ''
или ""
.
Следовательно, когда мы пишем or float
в нашем условии, это эквивалентно записи or True
, которая всегда будет возвращать True
.
numbers.Number
Хороший способ проверить, является ли переменная числом - это модуль numbers
. Вы можете проверить, является ли переменная экземпляром класса Number
, с помощью функции isinstance()
:
import numbers
variable = 5
print(isinstance(5, numbers.Number))
Это приведет к:
True
Примечание. Этот подход может неожиданно работать с числовыми типами вне ядра Python. Некоторые фреймворки могут иметь нечисловую реализацию Number
, и в этом случае этот подход вернет ложный результат False
.
Использование блока try-except
Другой способ проверить, является ли переменная числом - использовать блок try-except. В блоке try мы преобразуем данную переменную в int
или float
. Успешное выполнение блока try
означает, что переменная является числом, то есть либо int
, либо float
:
myVariable = 1
try:
tmp = int(myVariable)
print('The variable a number')
except:
print('The variable is not a number')
Это работает как для int, так и для float, потому что вы можете привести int к float и float к int.
Если вы специально хотите только проверить, является ли переменная одной из них, вам следует использовать функцию type()
.
String.isnumeric()
В Python isnumeric() - это встроенный метод, используемый для обработки строк. Методы issnumeric() возвращают «True», если все символы в строке являются числовыми символами. В противном случае он возвращает «False».
Эта функция используется для проверки, содержит ли аргумент все числовые символы, такие как: целые числа, дроби, нижний индекс, верхний индекс, римские цифры и т.д. (Все написано в юникоде)
string = '123ayu456'
print(string.isnumeric())
string = '123456'
print( string.isnumeric())
Вернет:
False
True
String.isdigit()
Метод isdigit()
возвращает истину, если все символы являются цифрами, в противном случае значение False.
Показатели, такие как ², также считаются цифрами.
print("\u0030".isdigit()) # unicode for 0
print("\u00B2".isdigit()) # unicode for ²
Вернет:
True
True