DevGang
Авторизоваться

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, None0 и пустых []{}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

Источник:

#Python
Комментарии 1
Сергей Назаров 19.04.2022 в 18:16

Функция type не работает т.к input() по дефолту возвращает строку

Чтобы оставить комментарий, необходимо авторизоваться

Присоединяйся в тусовку

В этом месте могла бы быть ваша реклама

Разместить рекламу