Проверка, является ли переменная целым числом
Проблема: Как проверить, является ли переменная целым числом?
Я столкнулся с проблемой в Python, когда мне нужно проверить, является ли переменная целым числом. Я нашел вопрос, на который уже есть ответы по этой теме, но, к сожалению, он был закрыт 4 года назад. При этом сообщалось, что причины закрытия не были устранены. Сообщество также обсуждало возможность повторного открытия вопроса 2 года назад, но решение оставили прежним.
Я хотел бы получить рекомендации по правильному и каноничному способу проверки типа переменной на целое число. Не могли бы вы помочь мне разобраться в этом вопросе? Я ищу советы и примеры кода, которые могут быть полезны.
5 ответ(ов)
Все предложенные ответы, судя по всему, упускают тот факт, что число с плавающей точкой (в Python плавающие числа — это на самом деле числа типа double) может также быть целым числом (если после десятичной точки ничего нет). Я использую встроенный метод is_integer()
для проверки этого.
Вот пример (для выполнения чего-то каждые x раз в цикле for
):
for index in range(y):
# что-то делаем
if (index / x).is_integer():
# делаем что-то особое
Редактирование:
Вы всегда можете конвертировать в float перед вызовом этого метода. Вот три возможности:
>>> float(5).is_integer()
True
>>> float(5.1).is_integer()
False
>>> float(5.0).is_integer()
True
В противном случае вы можете сначала проверить, является ли значение целым числом, как сказал Агостино:
def is_int(val):
if type(val) == int:
return True
else:
if val.is_integer():
return True
else:
return False
Почему бы не попробовать что-то вроде:
if x % 1 == 0:
Этот код проверяет, является ли переменная x
целым числом. Если результат деления x
на 1 равен нулю, значит, x
делится на 1 без остатка, и, следовательно, это целое число. Это простой и эффективный способ проверки типа числа.
Вместо того чтобы усложнять, почему бы не сделать просто так:
if type(var) is int:
Это прямой и понятный способ проверить тип переменной. Однако, стоит отметить, что рекомендуется использовать isinstance()
по следующим причинам:
Поддержка наследования:
isinstance()
также вернётTrue
, еслиvar
является экземпляром подклассаint
, тогда какtype(var) is int
не сработает в таких случаях.Читаемость: Код с
isinstance()
часто воспринимается как более читаемый:if isinstance(var, int):
Так что, хотя ваш подход работает, использование isinstance()
делает код более гибким и правильным с точки зрения объектно-ориентированной практики.
Вы также можете использовать метод str.isdigit
. Попробуйте ознакомиться с документацией, вызвав help(str.isdigit)
.
Вот пример функции, проверяющей, является ли строка цифровой:
def is_digit(s):
return s.isdigit()
Этот метод возвращает True
, если все символы в строке являются цифрами, и False
в противном случае.
Простое решение, которое я использую во всех своих проектах, выглядит следующим образом. Оно проверяет, состоит ли переменная только из чисел:
test = input("Введите текст: ")
if test.isdigit():
print("Это число.")
else:
print("Это не число.")
В этом примере функция isdigit()
проверяет, состоит ли строка из цифр. Если да, выводится сообщение о том, что это число; в противном случае мы информируем, что это не число.
Как преобразовать строку в float или int?
Сгенерировать случайные целые числа от 0 до 9
Максимальные и минимальные значения для целых чисел (ints)
Как использовать десятичное значение шага в range()?
Как отсортировать список/кортеж списков/кортежей по элементу на заданном индексе